在Joda Time中设置默认年份

3

我目前在我的应用程序中使用Joda时间日期API。我正在使用以下代码将多种日期格式解析为一个单一的格式。但是,当日期格式中没有年份时,我遇到了问题。当前,它会将年份设置为“2000”。

如果日期格式中缺少年份,是否有一种方法将年份设置为默认值?

private static final DateTimeParser[] parsers = {
  DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z").getParser(),
  DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").getParser(),
  DateTimeFormat.forPattern("[dd/MMM/yyyy:HH:mm:ss Z]").getParser(),
  DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").getParser(),
  DateTimeFormat.forPattern("MMM-dd HH:mm:ss,SSS").getParser()
 };

 public static DateTime ConvertDate(String timestamp) {

   DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, parsers).toFormatter();

   DateTime date = formatter.parseDateTime(timestamp);
   return date;
}

示例:

Mar-07 13:59:13,219

转换为:

当前年份-03-07T12:59:13.219-07:00

说明:

需要将日期格式从月-日 时:分:秒,毫秒 转换为 ISO 8601 格式,即:年-月-日 T 时:分:秒.毫秒 偏移量。其中,偏移量表示与协调世界时的时差,例如北京时间为东八区,偏移量为 +08:00。

2个回答

5

You can use withDefaultYear():

public static DateTime convertDate(String timestamp) {

  int stdYear = 1970; // example for new default year

  DateTimeFormatter formatter = 
    new DateTimeFormatterBuilder().append(null, parsers).toFormatter()
    .withDefaultYear(stdYear);

  return formatter.parseDateTime(timestamp);
}

0

自Joda 2.0起,默认年份为2000,以便正确解析2月29日,请参见this

不确定是否可以更改(请使用pivotYear检查this),但作为绕过解决方案,如果没有时间戳,我会将当前年份添加到我的时间戳中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接