什么';用Java创建日期的正确方法是什么?

什么';用Java创建日期的正确方法是什么?,java,datetime,date,calendar,Java,Datetime,Date,Calendar,我被Date类的JavaAPI弄糊涂了。所有内容似乎都已弃用,并链接到Calendar类。所以我开始使用Calendar对象来做我想对日期做的事情,但直觉上,当我真正想做的只是创建和比较两个日期时,使用Calendar对象会让我有点困扰 有没有一个简单的方法可以做到这一点?现在我知道了 Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(0); cal.set(year, month, day, hour, minute, sec

我被Date类的JavaAPI弄糊涂了。所有内容似乎都已弃用,并链接到Calendar类。所以我开始使用Calendar对象来做我想对日期做的事情,但直觉上,当我真正想做的只是创建和比较两个日期时,使用Calendar对象会让我有点困扰

有没有一个简单的方法可以做到这一点?现在我知道了

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
cal.set(year, month, day, hour, minute, second);
Date date = cal.getTime(); // get back a Date object
您可以试试。

优秀的库几乎总是比Java的日期或日历类更好的选择。这里有几个例子:

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);
你可以用


但我不知道它是否应该被认为比使用日历更正确…

+1在我看来,Joda time比内置的Java date功能要好得多。我认为这更慢,因为它必须解析字符串。是的,你可能是对的,但它也是最“可读”的日期生成方法,因此,如果您不是在循环中执行此操作,请记住SimpleDataFormat是不同步的。如果重用该实例,并且两个方法访问相同的SimpleDataFormat,则会导致错误。@Bohemian该代码有一个问题:在执行代码时,创建的
Date
对象的毫秒数被设置为内部时钟的任何值(如果调用
cal.setTimeInMillis(0),则可以绕过该问题)
之前的
校准设置(…)
-虽然会产生一些愚蠢的代码)。刚刚遇到了那个问题…@kratenko好的,说得好。而且日历还是一团糟:/
Date-Date=new-gregorianalendar(年、月、日)SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date d = sdf.parse("21/12/2012");