当前位置:  开发笔记 > 编程语言 > 正文

在Java中操作日期和时间戳的最佳方法是什么?

如何解决《在Java中操作日期和时间戳的最佳方法是什么?》经验,为你挑选了2个好方法。

每次我需要使用Java中的日期和/或时间戳时,我总觉得我做错了什么并花费无数个小时试图找到一种更好的API工作方式,而无需编写我自己的日期和时间实用程序类.这是我遇到的一些烦人的事情:

基于0的月份.我意识到最好的做法是使用Calendar.SEPTEMBER而不是8,但令人讨厌的是8代表9月而不是8月.

获取没有时间戳的日期.我总是需要将日期的时间戳部分归零的实用程序.

我知道我过去还有其他问题,但不记得了.随意在您的回复中添加更多内容.

所以,我的问题是......你使用什么第三方API来简化Java对日期和时间操作的使用,如果有的话?有关使用Joda的任何想法?有人仔细观察JSR-310 Date and Time API吗?



1> Rich Adams..:

这篇文章对比较Java Date/Time API和JODA进行了很好的讨论.

我个人只需要使用Gregorian Calendar和SimpleDateFormat,我需要在Java中操作日期/时间.我从来没有在使用Java API时遇到任何问题,并且发现它很容易使用,因此没有真正研究过任何替代方案.



2> Basil Bourqu..:
java.time

Java 8及更高版本现在包含java.time框架.受JSR 310定义的Joda-Time的启发,由ThreeTen-Extra项目扩展.请参阅教程.

该框架取代了旧的java.util.Date/.Calendar类.转换方法允许您来回转换以使用尚未针对java.time类型更新的旧代码.

核心课程是:

Instant
时间轴上的一个时刻,始终是UTC.

ZoneId
一个时区.子类ZoneOffset包括UTC的常量.

ZonedDateTime= Instant+ ZoneId
表示调整到特定时区的时间轴上的时刻.

该框架解决了您列出的几个问题.

基于0的月份

java.time中的月号为1-12.

更好的是,a Enum(Month)为一年中的每个月提供一个对象实例.因此,您无需依赖代码中的"魔术"数字,如910.

if ( theMonth.equals ( Month.OCTOBER ) ) {  …

此外,该枚举包括一些方便的实用程序方法,如获取一个月的本地化名称.

如果还不熟悉Java枚举,请阅读教程并进行学习.它们出奇地方便且功能强大.

没有时间的约会

LocalDate级表示日期,只值,没有时间的天,没有时区.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

请注意,确定日期需要时区.新的一天在巴黎早些时候比蒙特利尔还要早,那里仍然是"昨天".本ZoneId类代表一个时区.

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );

同样,还有一个LocalTime班级,其中一个时间段尚未与日期或时区相关联.


关于java.time

该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

现在处于维护模式的Joda-Time项目建议迁移到java.time类.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

从哪里获取java.time类?

Java SE 8, Java SE 9及更高版本

内置.

带有捆绑实现的标准Java API的一部分.

Java 9增加了一些小功能和修复.

Java SE 6 Java SE 7

许多java.time功能都被反向移植到ThreeTen-Backport中的 Java 6和7 .

Android的

所述ThreeTenABP项目适应ThreeTen-反向移植为Android(上面提到的)特异性.

请参阅如何使用ThreeTenABP ....

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有