これが今の私の解決策です:
joda-timeをフォークし、CharSequence
sではなくsで動作するように小さな変更を加えましたString
。ここにありますhttps://github.com/hedefalk/joda-time/commit/ef3bdafd89b334fb052ce0dd192613683b3486a4
それから私はこのように書くことができますDateParser
:
trait DateParsers extends RegexParsers {
def dateTime(pattern: String): Parser[DateTime] = new Parser[DateTime] {
val dateFormat = DateTimeFormat.forPattern(pattern);
def jodaParse(text: CharSequence, offset: Int) = {
val mutableDateTime = new MutableDateTime
val newPos = dateFormat.parseInto(mutableDateTime, text, offset)
(mutableDateTime.toDateTime, newPos)
}
def apply(in: Input) = {
val source = in.source
val offset = in.offset
val start = handleWhiteSpace(source, offset)
val (dateTime, endPos) = jodaParse(source, start)
if (endPos >= 0)
Success(dateTime, in.drop(endPos - offset))
else
Failure("Failed to parse date", in.drop(start - offset))
}
}
}
次に、このトレイトを使用して、次のようなプロダクションルールを作成できます。
private[this] def dateRow = "date:" ~> dateTime("EEE MMM d HH:mm:ss yyyy Z")
私はこれを酷使していますか?今は本当に疲れています…</p>