Dav*_*Coe 0 java jodatime java.util.date
我在构造DateTime(或LocalDate)时遇到了问题.我正在转换旧代码以在内部使用joda来使事情更加清晰.但是我遇到了+1900问题......
这通过:
assertEquals(2082, new Date(2082, 1, 1).getYear());
Run Code Online (Sandbox Code Playgroud)
这两个都失败了:
assertEquals(2083, new LocalDate(new Date(2083, 1, 1)).getYear());
assertEquals(2084, new DateTime(new Date(2084, 1, 1)).toLocalDateTime().getYear());
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?如何从Date对象获取DateTime?
来自javadoc java.util.Date(int year, int month, int date):
已过时.从JDK版本1.1开始,由Calendar.set(年份+ 1900,月份,日期)或GregorianCalendar(年份+ 1900,月份,日期)取代.
分配Date对象并对其进行初始化,使其表示由year,month和date参数指定的日期开始的午夜,本地时间.
参数:年份减去1900年.月份0-11之间.日期为1-31之间的当月.
除了它声明年份参数是与1900年的偏移之外,你不应该使用这个构造函数,因为它已被弃用.相反,使用java.util.Calendar:
Calendar cal = Calendar.getInstance();
cal.set(2083, 1, 1);
assertEquals(2083, new LocalDate(cal).getYear());
Run Code Online (Sandbox Code Playgroud)