不推荐使用java.util.Date类的参数化构造函数.有什么选择?

Tim*_*Tim 26 java date deprecated

我可以用什么来取代它new Date(2009, 12, 9)

谢谢你的帮助.

Jon*_*eet 25

理想情况下,使用Joda Time代替.它是内置的无限优越的API.然后,您会希望选择java.timeLocalDateTime根据您的具体要求(这是一个复杂的领域-我不打算尝试在一两句话来概括,但文档做好).

如果绝对必要,请使用java.util.CalendarDateTime在需要时将其转换为.

  • @Tim:在问题中总是值得一提的非标准环境...... (3认同)
  • 为Joda Time +1,与日期和日历相比,这是一个梦想. (2认同)

Max*_*AMM 25

日历!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);
Run Code Online (Sandbox Code Playgroud)

请注意,我12月份没有12,因为它实际上是11(1月是0).

然后,您可以轻松地添加或删除秒,分钟,小时,天,月或年:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);
Run Code Online (Sandbox Code Playgroud)

最后,如果你想要一个日期:

cal.getTime();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,使用此解决方案时,小时、分钟、秒(和分数)将设置为其当前值。这真的不是很干净。 (2认同)

pjp*_*pjp 17

如果您查看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.
Run Code Online (Sandbox Code Playgroud)

year不是你所期望的,也不是month.

要表示您提到的日期,您需要Date像这样打电话(不推荐)

new Date(2009-1900, 12-1, 9)
Run Code Online (Sandbox Code Playgroud)

替代使用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();
Run Code Online (Sandbox Code Playgroud)

  • 日历的月份仍为零. (2认同)

Osc*_*Ryz 8

您还可以使用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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意不要将`SimpleDateFormat`设为`static`实例,因为它不是线程安全的.请访问http://www.ibm.com/developerworks/java/library/j-jtp09263.html (2认同)