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

4

我尝试了不同的ISODateTimeFormatsdateHourMinuteSecond()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
1个回答

3

我在 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

那很有帮助,但我仍然想要没有毫秒的日期时间对象,而不是字符串形式的。请给予建议! - yellow
DateTime对象始终保持毫秒值。即使您解析一个没有毫秒值的字符串,毫秒值也会自动设置为零。如果您只想忽略毫秒部分,可以实现自己的ReadablePartial子类(您可以查看LocalDateTime,它是一个没有时区字段的DateTime - 您可以类似地做一些类似的事情,但也从中删除毫秒字段)。我从未做过部分类,但这就是我开始的方式。 - user7605325

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接