日期时间格式化程序 Joda 使用可选的毫秒解析多种 UTC 格式



我正在尝试使用以下 joda 解析多种可能的 UTC 时间格式:

        DateTimeFormatter formatter;
        DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
        builder.append(DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss.sss"));
        builder.append(DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss"));
        formatter = builder.toFormatter();
        formatter.withZone(DateTimeZone.UTC);
        System.out.println(formatter.parseDateTime("20130122-12:01:59"));

我收到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "20130122-12:01:59" is too short
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:873)
    at com.cme.clearing.financials.gateway.internal.config.Sample.main(Sample.java:16)

有没有办法让 joda 在 UTC 中解析可选的米利斯。

是的,有:

// Milliseconds parser
final DateTimeParser msParser = new DateTimeFormatterBuilder()
    .appendLiteral('.').appendDecimal(millisOfSecond(), 1, 3)
    .toParser();
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder = builder.appendFixedDecimal(year(), 4)
    .appendFixedDecimal(monthOfYear(), 2)
    .appendFixedDecimal(dayOfMonth(), 2)
    .appendLiteral('-')
    .appendFixedDecimal(hourOfDay(), 2)
    .appendLiteral(':')
    .appendFixedDecimal(minuteOfHour(), 2)
    .appendLiteral(':')
    .appendFixedDecimal(secondOfMinute(), 2)
    .appendOptional(msParser); // <-- HERE: optional milliseconds
// builder.build().withTimeZone(DateTimeZone.UTC) will return the formatter

当然,适应你的代码,但这应该很容易。

编辑:适应OP的需求

最新更新