gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:40 24 4
gpt4 key购买 nike

由于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com