JodaTime从Java.util.Date转换为DateTime(或LocalDate)

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?

Vla*_*lad 5

来自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)