What's the best way to manipulate Dates and Timestamps in Java?每次我需要使用Java中的日期和/或时标时,我总是觉得自己做错了事,花了无尽的时间试图找到使用API??的更好方法,而不必编写自己的Date和时间实用程序类。这是我刚遇到的一些烦人的事情:
因此,我的问题是...您使用什么第三方API来简化Java对Date and Time操作的使用(如果有)?对使用Joda有任何想法吗?任何人都仔细看过JSR-310日期和时间API? 这篇文章对比较Java Date / Time API与JODA进行了很好的讨论。 我个人只要需要在Java中操作日期/时间,就可以使用Gregorian Calendar和SimpleDateFormat。我在使用Java API方面从未遇到任何问题,并且发现它非常易于使用,因此没有真正研究任何替代方法。 java.time Java 8和更高版本现在包括java.time框架。受JSR 310定义的Joda-Time启发,并由ThreeTen-Extra项目扩展。请参阅教程。 此框架取代了旧的java.util.Date/.Calendar类。转换方法使您可以来回转换,以使用尚未针对java.time类型更新的旧代码。
核心类是:
此框架解决了您列出的几个问题。 从零开始的月份 java.time中的月数是1-12。 更好的是,
此外,该枚举还包含一些便捷的实用方法,例如获取一个月的本地化名称。 如果您还不熟悉Java枚举,请阅读该教程并继续学习。它们出奇的方便和强大。 没有时间的date
请注意,确定日期需要一个时区。巴黎比蒙塔尔(Monter)的新天还早,那里仍然是"昨天"。
类似地,有一个 关于java.time java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧版旧式日期时间类,例如 Apache Commons Lang项目具有一个 我经常使用 http://commons.apache.org/lang/ 我已经专门使用Joda三年了,肯定会推荐它-它的整个区域都覆盖有一个"按其说的做"的界面。 Joda在您启动时可能看起来很复杂,例如它具有周期,持续时间和间隔的概念,看起来很相似,但是您可以简单地通过将 使用Java总是能让我受益的是日期时间库。我从来没有使用过Joda,只是简要地看过它,看起来像是一个不错的实现,如果我正确地理解JSR-130,它会从Joda那里获取知识并将其最终包含在JavaSE中。 对于过去的项目,我经常包装Java日期时间对象,这本身就是一项任务。然后使用包装器进行日期处理。 与javascript中的相同。当有人认为吸烟是个好主意时,让2008表示2008年,即31表示该月的第31天,这是一个好主意,而且-这是最好的部分-11表示第12个月。 另一方面,他们三分之二做到了。 我正在使用GregorianCalendar-始终无处不在。简单的java.util.Date太复杂了。 所以,我的建议是-使用GC,它很简单 编写您自己的日期API非常简单,它位于原始Java类Date和Calendar之上。基本上,日期和日历都遭受以下事实的困扰:它们试图将两个概念塞入一个类: 理解了这一点,它将彻底改变您在代码中处理类似日期的概念的方式。事情将变得更简单,更清晰,更好。在任何意义上! 对我而言,Joda过于复杂,至少出于绝大多数目的,我尤其不喜欢它们违反标准Java格式的事实,其中一个例子就是它们如何解析和格式化日期。 JODA的负责人Stephen Colebourne是JSR-310的规范负责人,这也遇到了相同的问题,恕我直言(在过去的几年中,我一直关注并为讨论做出了贡献)。 自己动手做;这很容易。只需填写以下类:MyDate(包装年月日),Month(一个枚举),TimeOfDay(小时-分钟-秒-毫秒),DayOfWeek(枚举),Instant(包装一个长整数)。在"即时"和"日期"之间进行转换时,请始终考虑时区。 如果这看起来令人生畏,则可以在后台使用Calendar和SimpleDateFormat。您将在一天内完成此操作,永远不会后悔。 许多程序员从使用Date开始,它具有许多不赞成使用的重载构造函数(使其很难使用),但是一旦弄清楚了GregorianCalendar,它就会变得更易于管理。这里的示例非常有帮助: http://java.sun.com/j2se/1.4.2/docs/api/java/util/GregorianCalendar.html 日期API很难设计,尤其是在必须处理本地化的情况下。尝试自己动手,看看,值得至少做一次。 Joda能够做到如此出色的事实是其开发人员的真实荣誉。要回答您的问题,尽管我自己从未玩过它,但除了该库的其他方面,我什么都没有听到。 |