Java日期与日历
有人可以提供有关Date
和Calendar
类型的最新“最佳做法”建议。
在编写新代码时,是否最好始终支持Calendar
over Date
,或者是否存在Date
是更合适的数据类型的情况?
日期是一个更简单的类,主要出于向后兼容的原因。 如果您需要设置特定日期或进行日期算术,请使用日历。 日历还处理本地化。 Date的上一个日期操作函数已被弃用。
就个人而言,我倾向于在有选择时使用毫秒中的任意一个时间(或适当的长时间)或日历。
Date和Calendar都是可变的,这在使用API时往往会出现问题。
新代码(如果您的政策允许第三方代码)的最佳方式是使用乔达时间库。
日期和日历都具有如此多的设计问题,既不是新代码的良好解决方案。
Date
和Calendar
实际上是相同的基本概念(两者都代表即时时间,并且是基础long
值的包装)。
人们可能会认为Calendar
实际上比Date
更 timeZone
,因为它似乎提供了有关诸如星期几和时间之类事情的具体事实,而如果您更改其timeZone
属性,那么具体会变成blancmange! 由于这个原因,这两个对象都不是真正有用的年度或日期的存储。
仅将Calendar
用作计算器,当给定Date
和TimeZone
对象时,它将为您执行计算。 避免将它用于应用程序中的属性输入。
使用SimpleDateFormat
和TimeZone
和Date
一起生成显示字符串。
如果你觉得冒险使用Joda-Time,虽然它是不必要的复杂的恕我直言,并且很快在任何情况下都会被JSR-310数据API取代。
我之前已经回答说,推出自己的YearMonthDay
类并不困难,该类使用Calendar
下的Calendar
进行日期计算。 我对这个建议感到低落,但我仍然相信这是一个有效的建议,因为对于大多数使用情况来说,Joda-Time(和JSR-310)确实太复杂了。
下一篇: Detecting an "invalid date" Date instance in JavaScript