Это мое решение прямо сейчас:
Я раздвоил время joda и внес небольшие изменения, чтобы он работал на CharSequence
с вместо 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")
Я переутомляюсь? Я очень устала прямо сейчас ...