我来自c#世界,所以对Java还不是很有经验。Eclipse刚刚告诉我Date已弃用:
Person p = new Person();
p.setDateOfBirth(new Date(1985, 1, 1));
为什么?应该用什么(尤其是在上述情况下)来代替呢?
我来自c#世界,所以对Java还不是很有经验。Eclipse刚刚告诉我Date已弃用:
Person p = new Person();
p.setDateOfBirth(new Date(1985, 1, 1));
为什么?应该用什么(尤其是在上述情况下)来代替呢?
当前回答
Date构造函数期望年份的格式为1900年以来的年份、从零开始的月份、从一开始的日期,并将小时/分钟/秒/毫秒设置为零。
Date result = new Date(year, month, day);
因此,使用Calendar替换(从零开始的年,从零开始的月,从一开始的日)来替换已弃用的Date构造函数,我们需要这样的东西:
Calendar calendar = Calendar.getInstance();
calendar.clear(); // Sets hours/minutes/seconds/milliseconds to zero
calendar.set(year + 1900, month, day);
Date result = calendar.getTime();
或者使用Java 1.8(年为0,月和日为1):
Date result = Date.from(LocalDate.of(year + 1900, month + 1, day).atStartOfDay(ZoneId.systemDefault()).toInstant());
以下是Date、Calendar和Java 1.8的相同版本:
int year = 1985; // 1985
int month = 1; // January
int day = 1; // 1st
// Original, 1900-based year, zero-based month, one-based day
Date date1 = new Date(year - 1900, month - 1, day);
// Calendar, zero-based year, zero-based month, one-based day
Calendar calendar = Calendar.getInstance();
calendar.clear(); // Sets hours/minutes/seconds/milliseconds to zero
calendar.set(year, month - 1, day);
Date date2 = calendar.getTime();
// Java-time back to Date, zero-based year, one-based month, one-based day
Date date3 = Date.from(LocalDate.of(year, month, day).atStartOfDay(ZoneId.systemDefault()).toInstant());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS");
// All 3 print "1985-Jan-01 00:00:00.000"
System.out.println(format.format(date1));
System.out.println(format.format(date2));
System.out.println(format.format(date3));
其他回答
不建议使用特定的Date构造函数,而应该使用Calendar。 JavaDoc for Date描述了哪些构造函数不推荐使用,以及如何使用Calendar替换它们。
Date本身没有被弃用。它的很多方法都是。详情请看这里。
请改用java.util.Calendar。
new GregorianCalendar(1985, Calendar.JANUARY, 1).getTime();
(java -8之前的方式)
我偶然发现这个问题是一个新问题的重复,该问题询问在特定的年、月和日获得日期的非弃用方法是什么。
到目前为止,这里的答案是使用Calendar类,这在Java 8出现之前是正确的。但是从Java 8开始,这样做的标准方法是:
LocalDate localDate = LocalDate.of(1985, 1, 1);
如果你真的需要java。util。约会,你可以使用这个问题中的建议。
要了解更多信息,请查看Java 8的API或教程。
您可以使用Calendar类在代码中创建类似new Date(年、月、日)的方法。
private Date getDate(int year,int month,int date){
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DAY_OF_MONTH, day);
return cal.getTime();
}
它将像Date的已弃用构造函数一样工作