每次我需要使用Java中的日期和/或时间戳时,我总觉得我做错了什么并花费无数个小时试图找到一种更好的API工作方式,而无需编写我自己的日期和时间实用程序类.这是我遇到的一些烦人的事情:
基于0的月份.我意识到最好的做法是使用Calendar.SEPTEMBER而不是8,但令人讨厌的是8代表9月而不是8月.
获取没有时间戳的日期.我总是需要将日期的时间戳部分归零的实用程序.
我知道我过去还有其他问题,但不记得了.随意在您的回复中添加更多内容.
所以,我的问题是......你使用什么第三方API来简化Java对日期和时间操作的使用,如果有的话?有关使用Joda的任何想法?有人仔细观察JSR-310 Date and Time API吗?
Ric*_*ams 10
这篇文章对比较Java Date/Time API和JODA进行了很好的讨论.
我个人只需要使用Gregorian Calendar和SimpleDateFormat,我需要在Java中操作日期/时间.我从来没有在使用Java API时遇到任何问题,并且发现它很容易使用,因此没有真正研究过任何替代方案.
Java 8及更高版本现在包含java.time框架.受JSR 310定义的Joda-Time的启发,由ThreeTen-Extra项目扩展.请参阅教程.
该框架取代了旧的java.util.Date/.Calendar类.转换方法允许您来回转换以使用尚未针对java.time类型更新的旧代码.
核心课程是:
InstantZoneIdZoneOffset包括UTC的常量.ZonedDateTime= Instant+ ZoneId该框架解决了您列出的几个问题.
java.time中的月号为1-12.
更好的是,a Enum(Month)为一年中的每个月提供一个对象实例.因此,您无需依赖代码中的"魔术"数字,如9或10.
if ( theMonth.equals ( Month.OCTOBER ) ) { …
Run Code Online (Sandbox Code Playgroud)
此外,该枚举包括一些方便的实用程序方法,如获取一个月的本地化名称.
如果还不熟悉Java枚举,请阅读教程并进行学习.它们出奇地方便且功能强大.
该LocalDate级表示日期,只值,没有时间的天,没有时区.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Run Code Online (Sandbox Code Playgroud)
请注意,确定日期需要时区.新的一天在巴黎早些时候比蒙特利尔还要早,那里仍然是"昨天".本ZoneId类代表一个时区.
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
Run Code Online (Sandbox Code Playgroud)
同样,还有一个LocalTime班级,其中一个时间段尚未与日期或时区相关联.
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
| 归档时间: |
|
| 查看次数: |
19352 次 |
| 最近记录: |