我正在使用 Java 7 开发会议安排应用程序。
我已经看到有几种数据类型可以处理日期。
例子:
private Date creationDate;
private DateTime creationDate;
private Calendar creationDate;
我的问题是: type和之间有什么区别?Calendar
Date
DateTime
我正在使用 Java 7 开发会议安排应用程序。
我已经看到有几种数据类型可以处理日期。
例子:
private Date creationDate;
private DateTime creationDate;
private Calendar creationDate;
我的问题是: type和之间有什么区别?Calendar
Date
DateTime
Java 中的类型对象
Date
用于表示特定的时间瞬间。它还允许转换和解析日期,但是提供此功能的方法现在已弃用。取而代之的是处理日期算术和转换的类
Calendar
,该类还提供了使用Locales
和表示不同语言或特定日历类型的日期的能力。将对象转换
Date
为Calendar
很简单:拥有实例后,
Calendar
您可以通过以下方式获取有关日期的信息:要记住的一件事是,月份被认为是从 0 到 11 的整数。在文档中,您可以找到可以查阅的所有可用字段。
如果您有一个实例
Calendar
并且想要转换为日期:对于解析和格式化日期,建议使用类
DateFormat
或子类,例如SimpleDateFormat
,例如:我的建议是您将日期存储为对象
Date
,因为它们更容易生成对象,并且如果您需要任何转换或操作,例如将 5 个月添加到日期使用Calendar
,然后返回到Date
.Lastly
DateTime
不是 Java SE 中的数据类型,它作为一个名为Joda Time的库的一部分存在,它提供了多种用于操作日期的附加方法。从
java.util.Date
(翻译)的文档中:虽然
java.util.Calendar
(翻译,强调我的):类的设计中最大的问题
Date
是它是可变的,当它应该是不可变的并且对日期的操作例如增加(或减少)天,小时,秒,年等,并且Date
s的生成应该度过Calendar
。至少这是我通常避免处理Date
. 在 Java 8 中,这是通过实现一个名为Java 8 Date and Time的用于处理日期和时间的新内部框架来解决的,并且可以在包下找到这些类java.time
(您的问题基于 Java 7,所以我只提到 Java 8 的这一部分,这点我就不深究了)。要使用
Calendar
,我建议您始终按如下方式对其进行初始化:由于 , 的实现不止一种
Calendar
,最著名(和使用的)GregorianCalendar
是 ,但也有BuddhistCalendar
andJapaneseImperialCalendar
(至少来自 Open JDK 代码)。该方法Calendar#getInstance
将日历的创建委托createCalendar
给 Java 8 实现如下的方法(查看 HotSpot 源代码):我总是推荐使用,
Calendar
因为与直接使用实现相比,尽可能使用抽象类和接口被认为是一种好的做法。这在此处进行了介绍:https ://stackoverflow.com/q/383947/1065197我不知道
DateTime
JDK 7 中声明的任何类。也许您指的是Joda Timeorg.joda.time.DateTime
库类(西班牙语中的奇怪名称),它作为一种解决方案出现,以避免使用它是可变的事实。是不可变的,您对 a 执行的操作实际上会创建一个新实例,而不是修改当前实例。Date
DateTime
DateTime
DateTime
如果你想知道在你的项目中应该使用哪个类,我会给你以下建议:
Date
(确保它们来自包java.util
)。Date
如何添加或删除时间的操作,有 2 个选项:Calendar
的实例设置它的时间,执行必要的操作,然后获取via的。Date
Calendar#setTime
Date
Calendar
Calendar#getTime
DateTime
de Joda。SimpleDateFormat#format(Date)
(eye, receiveDate
and notCalendar
) 并避免使用Date#getXyz
. 你也可以使用Calendar#get(Calendar.<campo>)
,但代码会非常冗长(我不知道这个的翻译)。为什么不直接
DateTime
在实体的字段中声明使用?好吧,因为有些框架不支持直接转换,除非您为其实现特定的转换器。一些示例:Hibernate 1、JSF、Spring 等。1 Hibernate 5 现在提供对 Java 8 日期时间库的支持。我猜这些框架在某个时候也会慢慢地走这条路。