无法从 joda dateTime 对象中删除毫秒

Unable to remove millis from joda dateTime object

我尝试了不同的 ISODateTimeFormats (dateHourMinuteSecond(), dateTimeNoMillis()) 和我自己的格式 "yyyy-MM-dd'T'HH:mm:ss",为了让时间戳被解析为没有毫秒的日期时间对象,它失败。

对于每种格式,我都尝试相应地修改字符串:

String value = "2011-01-24T09:45:00.000";
DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinuteSecond();
value = value.substring(0, value.lastIndexOf('.'));
System.out.println("Formatted dateTime: "+formatter.parseDateTime(value));

输出:

Formatted dateTime: 2011-01-24T09:45:00.000Z

我在 jodatime 2.2.

中进行了测试

formatter.parseDateTime(value) returns 一个 DateTime 对象。当您将此对象传递给 System.out.println 时,它会调用此 DateTime 对象的 toString() 方法。看看源代码,我发现它调用 ISODateTimeFormat:

// (from jodatime source)
/**
 * Output the date time in ISO8601 format (yyyy-MM-ddTHH:mm:ss.SSSZZ).
 * 
 * @return ISO8601 time formatted string.
 */
@ToString
public String toString() {
    return ISODateTimeFormat.dateTime().print(this);
}

要得到你想要的输出(没有毫秒),你需要格式化DateTime对象:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
value = value.substring(0, value.lastIndexOf('.'));
DateTime datetime = formatter.parseDateTime(value);

// *** create the formatter with the "no-millis" format ***
DateTimeFormatter formatterNoMillis = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
System.out.println("Formatted dateTime: " + datetime.toString(formatterNoMillis));

输出将是:

Formatted dateTime: 2011-01-24T09:45:00

你也可以这样做:

System.out.println("Formatted dateTime: " + formatterNoMillis.print(datetime));
//the output will be the same