不推荐使用java.util.Date类的参数化构造函数。 有什么选择?
我可以用什么来代替这个new Date(2009, 12, 9)
?
谢谢你的帮助。
理想情况下,请使用Joda Time 。 它是内置的无限优越的API。 然后,您需要根据您的具体要求在LocalDateTime
和DateTime
之间进行选择(这是一个复杂的领域 – 我不会尝试用一两句话来概括,但文档做得很好)。
如果绝对必要,请使用java.util.Calendar并在需要时将其转换为Date
。
日历!
Calendar cal = Calendar.getInstance(); cal.set(2009, Calendar.DECEMBER, 12);
请注意,我没有把12月份放到12月,因为它实际上是11(1月是0)。
然后,您可以轻松地添加或删除秒,分钟,小时,天,月或年:
cal.add(Calendar.HOUR, 2); cal.add(Calendar.MONTH, -5);
最后,如果你想要一个日期:
cal.getTime();
如果您查看Javadoc,它会指向您使用日历 。
从JDK版本1.1开始,由Calendar.set(年份+ 1900,月份,日期,小时,分钟)或GregorianCalendar(年份+ 1900,月份,日期,小时,分钟)取代。
如果查看Date
构造函数参数,您将看到它被弃用的原因:
参数:
year - the year minus 1900. month - the month between 0-11. date - the day of the month between 1-31. hrs - the hours between 0-23. min - the minutes between 0-59.
year
不是你所期望的,也不是month
。
要表示您提到的日期,您需要像这样调用Date
(不推荐)
new Date(2009-1900, 12-1, 9)
使用Calendar
的替代方案是
Calendar cal = Calendar.getInstance(); cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected Date dt = cal.getTime();
您还可以使用SimpleDateFormat对象:
import java.util.Date; import java.text.SimpleDateFormat; import java.text.ParseException; public class DateTest { public static void main( String [] args ) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy, MM, dd"); Date date = sdf.parse("2009, 12, 9"); System.out.println( date ); } }
蒂姆,在你的评论中,你提到你在GXT环境中这样做 – 即在GWT客户端代码中。 GWT不支持GregorianCalendar,你很可能无法通过GWTC编译器放置JodaTime(你可以,但你真的想要)。
如果你想在GWT中进行日历操作,我认为你真的可以选择使用JNSI。 请参阅JavaScript中的Date类。
GregorianCalendar(year + 1900, month, date)
不幸的是,Java中的日期支持非常糟糕。 正式地说,你可能不得不用日历来做这件事,但在我看来这不应该是必要的。 就像其他人提到的那样,Joda时间要好得多,但仍然不如Ruby on Rails中的日期那么容易使用。
我不知道任何Java软件包可以为你提供相当多的日期支持(Joda不尽如人意,但是很接近),但是在Groovy中,使用TimeCategory可以为你提供类似Ruby on Rails的日期支持。