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

标签 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.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/

相关文章:

java - 如何计算二维数组中每一列的平均值?

java - GMT 字符串转换为 Java 日期

java - Joda Time - 获取时区名称?

java joda-time 获取日期时间

grails - Grails-将Joda日期呈现为JSON时发生异常

java - 如何从ArrayList中删除条目?

Java机器人鼠标移动: setting speed?

java - 获取最新/最新的 HashMap 条目

c# - 将时间转换为十进制

python - 使用 pd.to_datetime 将字符串日期转换为日期时间格式时出错