我来自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构造函数已弃用,您可以尝试此代码。
import java.util.Calendar;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 6);// for 6 hour
calendar.set(Calendar.MINUTE, 0);// for 0 min
calendar.set(Calendar.SECOND, 0);// for 0 sec
calendar.set(1996,0,26);// for Date [year,month(0 to 11), date]
Date date = new Date(calendar.getTimeInMillis());// calendar gives long value
String mConvertedDate = date.toString();// Fri Jan 26 06:00:00 GMT+05:30 1996
其他回答
由于Date构造函数已弃用,您可以尝试此代码。
import java.util.Calendar;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 6);// for 6 hour
calendar.set(Calendar.MINUTE, 0);// for 0 min
calendar.set(Calendar.SECOND, 0);// for 0 sec
calendar.set(1996,0,26);// for Date [year,month(0 to 11), date]
Date date = new Date(calendar.getTimeInMillis());// calendar gives long value
String mConvertedDate = date.toString();// Fri Jan 26 06:00:00 GMT+05:30 1996
不建议使用特定的Date构造函数,而应该使用Calendar。 JavaDoc for Date描述了哪些构造函数不推荐使用,以及如何使用Calendar替换它们。
Date本身没有被弃用。它的很多方法都是。详情请看这里。
请改用java.util.Calendar。
类似于binnyb的建议,您可以考虑使用较新的Calendar > GregorianCalendar方法。请看这些最新的文档:
http://download.oracle.com/javase/6/docs/api/java/util/GregorianCalendar.html
请注意,Calendar.getTime()是不确定的,因为白天时间部分默认为当前时间。
为了重现,试着运行下面的代码几次:
Calendar c = Calendar.getInstance();
c.set(2010, 2, 7); // NB: 2 means March, not February!
System.err.println(c.getTime());
如输出。
Sun Mar 07 10:46:21 CET 2010
几分钟后运行完全相同的代码会得到:
Sun Mar 07 10:57:51 CET 2010
因此,虽然set()强制对应的字段为正确的值,但它泄漏了其他字段的系统时间。(以上使用Sun jdk6和jdk7进行测试)