new - java获取当前时间




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

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

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

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

  • 我知道过去有其他的问题,但是不能回想起来。 随意添加更多的答复。

所以,我的问题是...您使用什么第三方API来简化Java使用日期和时间操作(如果有的话)? 有关使用乔达的任何想法? 任何人都看着JSR-310日期和时间API?


Apache Commons Lang项目有一个DateUtils类来执行有用的日期操作。

我使用DateUtils.truncate()很多,这将“日期”的部分“零”出来(如果你希望你的日期对象,例如表示一个日期,而不包括任何时间信息)。 每种方法也适用于DateCalendar对象。

http://commons.apache.org/lang/


在JavaScript中是一样的。 当他们认为让2008年意味着2008年是一个好主意的时候,有些人一定是吸烟的,31意味着这个月的第31天,而这是最好的部分 - 11意味着第12个月。

另一方面,他们在三分之二的时间里做到了。


我使用GregorianCalendar - 总是和无处不在。 简单的java.util.Date太复杂了,是的。

所以,我的建议是 - 使用GC,它很简单


日期API非常难以设计,特别是如果他们必须处理本地化。 尝试推出自己的看法,这是值得做至少一次。 乔达能够做得如此出色的事实是对开发者的一个真正的信任。 为了回答你的问题,我从来没有听说过这个图书馆的好东西,尽管我自己从来没有玩过。



我一直在使用乔达三年,肯定会推荐它 - 它的整个区域覆盖着一个界面,“做它说的”。

当你开始的时候,乔达可能看起来很复杂,例如它具有周期,持续时间和间隔的概念,看起来有些类似,但是你可以简单地用org.joda.time.DateTime (或者org.joda.time.DateMidnight )在您的代码中使用java.util.Date ,并在理解其他区域之前坚持使用这些类包含的许多有用的方法。


java.time

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

这个框架取代了旧的java.util.Date/.Calendar类。 通过转换方法,您可以来回转换以使用尚未针对java.time类型更新的旧代码。

核心课程是:

这个框架解决了你列出的几个问题。

基于0的月份

java.times中的月份数是1-12。

更好的是, EnumMonth )为每年的每个月提供一个对象实例。 所以你不需要像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.DateCalendarSimpleDateFormat

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

要了解更多信息,请参阅Oracle教程 。 并搜索堆栈溢出了很多例子和解释。 规范是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里找到一些有用的类,比如IntervalYearWeekYearQuarter 等等





datetime