构造DateTime(或LocalDate)时遇到问题。我正在将旧代码转换为内部使用joda,以使事情更加理智。但是我遇到了+1900问题...
通过:
assertEquals(2082, new Date(2082, 1, 1).getYear());
这些都失败了:
assertEquals(2083, new LocalDate(new Date(2083, 1, 1)).getYear());
assertEquals(2084, new DateTime(new Date(2084, 1, 1)).toLocalDateTime().getYear());
这里发生了什么?如何从Date对象获取DateTime?
最佳答案
从javadoc中的java.util.Date(int year, int month, int date)
:
不推荐使用。从JDK 1.1版开始,由Calendar.set(year +
1900,月份,日期)或GregorianCalendar(年份+ 1900,月份,日期)。
分配一个Date对象并对其进行初始化,以便它表示
当地时间午夜(由指定的一天开始)
年,月和日期参数。
参数:year年份减去1900。month介于0-11之间的月份。
日期在1-31之间的日期。
除了它声明Years参数与1900年的偏移量这一事实外,您不应该使用此构造函数,因为它已过时。而是使用java.util.Calendar
:
Calendar cal = Calendar.getInstance();
cal.set(2083, 1, 1);
assertEquals(2083, new LocalDate(cal).getYear());
关于java - JodaTime从Java.util.Date转换为DateTime(或LocalDate),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9069362/