Java 无法从joda dateTime对象中删除毫秒
我尝试了不同的Java 无法从joda dateTime对象中删除毫秒,java,datetime,jodatime,datetime-format,Java,Datetime,Jodatime,Datetime Format,我尝试了不同的ISODateTimeFormats(dateHourMinuteSecond(),dateTimeNoMillis())和我自己的格式“yyyy-MM-dd'T:HH:MM:ss”,要将时间戳解析为没有毫秒的日期时间对象,它失败了 对于每种格式,我都尝试相应地修改字符串: String value = "2011-01-24T09:45:00.000"; DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinuteS
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(值)
返回一个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
这很有帮助,但我还是希望dateTime对象不带millis,而不是没有建议的字符串!
DateTime
对象始终保持毫秒值。即使不解析字符串,毫秒也会自动设置为零。如果只想忽略毫秒部分,可以实现自己的ReadablePartial
子类(可以查看LocalDateTime
,这是一个没有时区字段的DateTime
,您可以做类似的事情,但也可以从中删除毫秒字段)。我从来没有上过半身课,但我就是这样开始的。