构造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/

10-09 03:59