2011-06-22 105 views
79

我对Date类的Java API感到困惑。一切似乎都被弃用,并链接到日历类。所以我开始使用Calendar对象来做我想用Date做的事情,但直观地说,当我真正想做的事情是创建和比较两个日期时,使用Calendar对象会困扰我。什么是在Java中创建日期的正确方法?

有没有简单的方法来做到这一点?现在我做

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(0); 
cal.set(year, month, day, hour, minute, second); 
Date date = cal.getTime(); // get back a Date object 
+13

即罚款... – Bohemian

+0

@Bohemian代码有一个问题:创建的Date对象的毫秒数被设置为任何内部时钟,当代码执行时(如果调用'cal.setTimeInMillis (0)'在cal之前.set(...)' - 虽然会导致一些愚蠢的代码)。刚刚遇到这个问题... – kratenko

+0

@kratenko好点。和日历是乱七八糟的:/ – Bohemian

回答

15

你可以试试joda-time

+1

+1这 - Joda时间在我看来比内置的好得多Java日期功能。 – mikera

32

优秀的joda-time库几乎总是比Java的Date或Calendar类更好的选择。下面是几个例子:

DateTime aDate = new DateTime(year, month, day, hour, minute, second); 
DateTime anotherDate = new DateTime(anotherYear, anotherMonth, anotherDay, ...); 
if (aDate.isAfter(anotherDate)) {...} 
DateTime yearFromADate = aDate.plusYears(1); 
+0

我接受了这个建议,这对我很好。标准的Java日期类是一个真正的使用痛苦。我用了jodatime,完成了我的任务,利用不到一分钟的日期!谢谢。 –

93

您可以使用SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Date d = sdf.parse("21/12/2012"); 

但我不知道是否应该考虑更多比使用日历...

+0

我认为这是更慢,因为它必须解析一个字符串。 – benestar

+4

是的,你可能是对的,但它也是制作日期最“可读”的方法,所以如果你不在循环内部做... – Maxx

+2

只要记住SimpleDateFormat不是同步的。如果您重复使用实例,并且有两种方法访问相同的SimpleDateFormat,则会导致错误。 – borjab

相关问题