在Joda Time中设置默认年份

时间:2014-05-07 21:32:30

标签: java jodatime

我目前在我的应用程序中使用joda dateTime 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

2000-03-07T12:59:13.219-07:00

我想要的是什么:

例如: Mar-07 13:59:13,219

(currentyear)-03-07T12:59:13.219-07:00

2 个答案:

答案 0 :(得分:5)

您可以使用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);
}

答案 1 :(得分:0)

由于Joda 2.0默认年份为2000,因此可以正确解析2月29日,请检查this

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