joda时间意外格式

时间:2017-11-08 12:50:47

标签: java datetime jodatime datetime-parsing

我尝试使用Joda-Time库将String日期和时间转换为Date,但我得到的结果并非预期。

从我得到的服务器:

  

08/11/2017 12:30
  10/11/2017 12:30

Joda将其转换为:

  

2017-01-08T12:30:00.000 + 02:00
  2017-01-10T12:30:00.000 + 02:00

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/mm/yyyy HH:mm:ss");

// add two :00 at the end for the seconds
startDate = startDate +":00";
DateTime start = formatter.parseDateTime(startDate);
System.out.println(start.toString());

endDate= endDate + ":00";
DateTime end = formatter.parseDateTime(endDate);

1 个答案:

答案 0 :(得分:1)

这是因为您在本月使用mm,但正确的模式是大写 MM。查看documentation了解详情。

还有一件事。如果您的输入没有秒(:00),则不需要将其附加到输入字符串的末尾。你可以简单地创建一个没有它的模式:

// "MM" for month, and don't use "ss" for seconds if input doesn't have it
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm");

// parse input (without ":00" for the seconds)
DateTime start = formatter.parseDateTime("08/11/2017 12:30");
System.out.println(start.toString());

输出将是:

  

2017-11-08T12:30:00.000-02:00

请注意,偏移量(-02:00)与您的不同。这是因为如果你没有指定一个,DateTime会使用默认时区。