我尝试了不同的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)
返回一个 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
关于java - 无法从 joda dateTime 对象中删除毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43076808/