Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从joda dateTime对象中删除毫秒_Java_Datetime_Jodatime_Datetime Format - Fatal编程技术网

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
,您可以做类似的事情,但也可以从中删除毫秒字段)。我从来没有上过半身课,但我就是这样开始的。