java.time
我们有针对此问题的新技术:Java 8及更高版本中内置的java.time框架。
您的输入字符串采用标准的ISO 8601格式。该标准是java.time类默认用于解析/生成日期时间值的文本表示形式。
OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );
你的问题表明你想截取整秒。
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );
看起来您想省略偏移量和时区信息。预定义的格式化程序 DateTimeFormatter.ISO_LOCAL_DATE_TIME
可以实现此功能。
显然,您想在中间使用空格而不是标准的T
。您可以为此定义自己的格式化程序,但我建议只需进行字符串操作将T
替换为一个空格即可。
String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );
简单的字符串操作
正如问题的评论所建议的那样,严格来说,您可以仅使用字符串而不转换为任何日期时间对象来实现您的目标。但我在这里提供此答案,假设您可能有其他业务逻辑要处理这些日期时间值。
![Table of date-time types in Java, both modern and legacy](https://istack.dev59.com/psq1F.webp)
关于java.time
java.time框架已被内置于Java 8及以后版本。这些类取代了老旧且麻烦的遗留日期时间类,如java.util.Date
, Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于 维护模式,建议迁移到 java.time 类。
想要了解更多,请参阅 Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310。
您可以直接使用 java.time 对象与数据库进行交换。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。无需字符串,也不需要 java.sql.*
类。
如何获取 java.time 类?
![Table of which java.time library to use with which version of Java or Android](https://istack.dev59.com/RTM4T.webp)
ThreeTen-Extra项目扩展了java.time,提供了额外的类。该项目是java.time可能未来添加的潜在地试验场。您可以在此处找到一些有用的类,例如Interval
, YearWeek
, YearQuarter
和更多。
java.util.Date
,java.util.Calendar
和java.text.SimpleTextFormat
)现在已经成为遗留系统,被Java.time类所取代。 - Basil Bourque