【发布时间】:2013-12-06 00:25:20
【问题描述】:
object Utility {
object Time {
implicit class Regex(sc: StringContext) {
def r = new util.matching.Regex(sc.parts.mkString, sc.parts.tail.map(_ => "x"): _*)
}
case class DTCtxt(val formatter: DateTimeFormatter, tz: DateTimeZone)
trait BaseRelativeTime { def dt: DateTime }
case class Today(val dt: DateTime) extends BaseRelativeTime
case class Yesterday(val dt: DateTime) extends BaseRelativeTime
case class Absolute(val dt: DateTime) extends BaseRelativeTime
def parseRelativeDateTime(str: String, dtCtxt: DTCtxt) = {
println(str)
val dateTimeNow = DateTime.now()
val otherDateTimeNow = dateTimeNow.toDateTime(dtCtxt.tz)
def update_hour(h: String, s: String) =
if (s == "AM") h.toInt else if(h.toInt == 12) 0 else h.toInt + 12
str match {
case r"Today, (\d\d)$h:(\d\d)$m (\w\w)$s" =>
Today(otherDateTimeNow.withTime(update_hour(h, s), m.toInt, 0, 0))
case r"Yesterday, (\d\d)$h:(\d\d)$m (\w\w)$s" =>
Yesterday(otherDateTimeNow.minusDays(1).withTime(update_hour(h, s), m.toInt, 0, 0))
case dt@_ =>
Absolute(dtCtxt.formatter.parseDateTime(dt))
}
}
def guardedParseRelativeDateTime(str: String, dtCtxt: DTCtxt) = {
if(str.isEmpty)
None
else
Some(parseRelativeDateTime(str, dtCtxt))
}
}
}
- 有没有更好的方法来向客户端公开发生什么类型的日期时间匹配,trait -> case 类需要大量输入。
- 如何让 case 类隐式转换为时区,我只是在此处使用 case 类进行注释,不想继续输入
.dt? - 正则表达式插值代码(我从某处随机获取)似乎很基础,它是否存在于库中,还是我必须将其包含在我的代码中?。
- 还有其他建议可以使代码更健壮/更短吗?
【问题讨论】:
-
这个问题可能更适合codereview.stackexchange.com。
-
aww shucks,这种多元化是疯了,不知道存在!嗯,它仍处于测试阶段。