由于 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() ;
截断
如果您想更改数据本身的值以减少秒的小数部分,您可以截断。 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,上面的代码可以作为 Date
和 Instant
根据定义采用 UTC。相反,如果您想通过某个区域的 wall-clock time 的镜头来感知给定数据, 应用时区。在 Stack Overflow 中搜索 ZoneId
和 ZonedDateTime
类名以获取更多信息。
关于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 类?
- Java SE 8 , Java SE 9 , Java SE 10 , 然后
- 内置。
- 带有捆绑实现的标准 Java API 的一部分。
- Java 9 添加了一些次要功能和修复。
- Java SE 6和 Java SE 7
- 许多 java.time 功能在 ThreeTen-Backport 中被反向移植到 Java 6 和 7 .
- Android
- 更高版本的 Android bundle 实现 java.time 类。
- 对于早期的 Android (<26),ThreeTenABP项目改编ThreeTen-Backport (上文提到的)。参见 How to use ThreeTenABP… .
ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, 和 more .
关于java - 如何从 Java 中的日期对象格式中删除毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21448500/