Joda Time:如何解析时间并将默认日期设置为今天的日期

时间:2014-08-20 10:46:22

标签: scala date time jodatime

我必须以格式解析日期:

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 MMMdd MMM yyyy一切正常,但当我尝试解析时间时05:40我得到01-01-1970日期而不是今天的日期。在解析器中将默认日期设置为今天的日期的最简单方法是什么?

3 个答案:

答案 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)

DateTime完全不同,没有继承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());
}