我必须以格式解析日期:
HH:mm
dd MMM
dd MMM yyyy
我设法处理了最后两个:
val dateParsers = Array(
DateTimeFormat.forPattern("dd MMM").getParser,
DateTimeFormat.forPattern("dd MMM yyyy").getParser,
ISODateTimeFormat.timeParser().getParser
)
val formatter = new DateTimeFormatterBuilder().append(null, dateParsers).toFormatter.withZoneUTC
DateTime.parse(updatedString, formatter.withDefaultYear(currentYear).withLocale(ruLocale))
dd MMM
和dd MMM yyyy
一切正常,但当我尝试解析时间时05:40
我得到01-01-1970
日期而不是今天的日期。在解析器中将默认日期设置为今天的日期的最简单方法是什么?
答案 0 :(得分:3)
Joda-Time-Formatter仅支持withDefaultYear()
,而不支持withDefaultDate()
之类的内容。相反,你可以这样做:
DateTimeFormatter timeParser = DateTimeFormat.forPattern("HH:mm");
LocalTime time = timeParser.parseLocalTime("05:40");
DateTimeZone tz = DateTimeZone.getDefault(); // Or DateTimeZone.UTC or DateTimeZone.forID( "Europe/Paris" )
LocalDate today = LocalDate.now(tz);
DateTime moment = today.toLocalDateTime(time).toDateTime(tz);
System.out.println(moment);
// output in my local timezone: 2014-08-20T05:40:00.000+02:00
注意:我用Java编写了解决方案,因为我不是scala-guy。
答案 1 :(得分:1)
Date
和Time
完全不同,没有继承DateTimeFormatter
并在今天实施您的特殊时间"约会" - 你不会得到很远的算法。子类或者如果匹配某个正则表达式
答案 2 :(得分:0)
我使用withDate()
private static final DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("HH:mm");
@Test
public void test() {
DateTime dateTime = FORMATTER.parseDateTime("05:40");
DateTime now = new DateTime();
dateTime = dateTime.withDate(now.getYear(), now.getMonthOfYear(), now.getDayOfMonth());
System.out.println(dateTime.toDate());
}