java - 如何从 Java 中的日期对象格式中删除毫秒

标签 java java.util.date

由于 java.util.Date 对象将日期存储为 2014-01-24 17:33:47.214,但我希望日期格式为 2014 -01-24 17:33:47我想删除毫秒部分。

我检查了一个与我的问题相关的问题...

How to remove sub seconds part of Date object

我已经尝试了给定的答案

long time = date.getTime();
date.setTime((time / 1000) * 1000);

但我的结果日期格式为 2014-01-24 17:33:47.0。如何从我的日期格式中删除 0???

最佳答案

tl;dr

去掉小数秒。

myJavaUtilDate.toInstant()                         // Convert from legacy class to modern class. Returns a `Instant` object.
              .truncatedTo( ChronoUnit.SECONDS )   // Generate new `Instant` object based on the values of the original, but chopping off the fraction-of-second.

在生成 String 时隐藏小数秒。

myJavaUtilDate.toInstant()                         // Convert from legacy class to modern class. Returns a `Instant` object.
              .atOffset( ZoneOffset.UTC )          // Return a `OffsetDateTime` object. 
              .format( DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ). // Ask the `OffsetDateTime` object to generate a `String` with text representing its value, in a format defined in the `DateTimeFormatter` object.

避免遗留日期时间类

您使用的是麻烦的旧日期时间类,现在已被 java.time 类取代。

即时

通过调用添加到旧类的新方法,将旧的 java.util.Date 对象转换为 java.time.Instant

Instant instant = myJavaUtilDate.toInstant() ;

Table of types of date-time classes in modern java.time versus legacy.

截断

如果您想更改数据本身的值以减少秒的小数部分,您可以截断。 java.time 类使用 immutable objects , 所以我们生成一个新对象而不是改变(变异)原始对象。

Instant instantTruncated = instant.truncatedTo( ChronoUnit.SECONDS );

生成字符串

如果您不想截断,而只是想在生成表示日期时间值的字符串时抑制小数秒的显示,请定义一个格式化程序以满足您的需要。

例如,“uuuu-MM-dd HH:mm:ss”没有提及小数秒,因此数据中包含的任何毫秒都不会出现在生成的字符串中。

Instant 转换为 OffsetDateTime 以获得更灵活的格式。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC )
String output = odt.format( f );

时区

请注意,您的问题忽略了时区问题。如果您打算使用 UTC,上面的代码可以作为 DateInstant 根据定义采用 UTC。相反,如果您想通过某个区域的 wall-clock time 的镜头来感知给定数据, 应用时区。在 Stack Overflow 中搜索 ZoneIdZonedDateTime 类名以获取更多信息。


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用 JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 如何从 Java 中的日期对象格式中删除毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21448500/

相关文章:

java - 如何在 Java 中构建读取 xml 文件的构造函数?

java-8 - java.util.Date 和 java.util.Calendar 是否已弃用?

JSTL 日期比较

json - 我如何(取消)将日期编码为 jackson 的时间戳

java - SAX 解析器的 endElement() 中不显示的字符

java - Restful Spring 服务中的 session 范围

validation - 日期值: when entered 00/00/0000 saves as 11/30/0002

java - 如何使用日期格式将 "24-Jun-2012"更改为 "24-06-2012"

java - eToken java key 工具证书

java - 使用 hadoop map reduce 处理 HTML 文件