乔达';s日期时间与java.util.Calendar不一致

乔达';s日期时间与java.util.Calendar不一致,java,datetime,jodatime,Java,Datetime,Jodatime,我使用以下代码检查joda的DateTime和java.util.Calendar之间的一致性。这个结果是正确的,但是如果我把2000年改为1900年,那么我会得到两个不同的结果。这是一个bug还是其他原因造成的 Calendar c = Calendar.getInstance(); c.set(1900,0,1,0,0,0); // Calendar's month is 0 based c.set(Calendar.MILLISECOND, 0); System.out.println(

我使用以下代码检查joda的DateTime和java.util.Calendar之间的一致性。这个结果是正确的,但是如果我把2000年改为1900年,那么我会得到两个不同的结果。这是一个bug还是其他原因造成的

Calendar c = Calendar.getInstance();
c.set(1900,0,1,0,0,0);  // Calendar's month is 0 based
c.set(Calendar.MILLISECOND, 0);
System.out.println(c.getTimeInMillis() / 1000);
DateTime dt = new DateTime(1900,1,1,0,0,0);   // joda's month is 1 based
System.out.println(dt.getMillis() / 1000);
这就是输出

-2209017600
-2209017943
这是另外一回事:)

结果:

-2208992400
-2208992400

Process finished with exit code 0
它与UTC和时区之间的偏移量有关。我的时区是1893年

结果:

year: 1893
-2429830800000
-2429830408000
UTC和设定时区之间的偏移量可以在时区数据库中进行检查

这是另一回事:)

结果:

-2208992400
-2208992400

Process finished with exit code 0
它与UTC和时区之间的偏移量有关。我的时区是1893年

结果:

year: 1893
-2429830800000
-2429830408000

UTC和设定时区之间的偏移量可以在时区数据库中进行检查

注意显示具体的结果吗?@Ambrish:Nope-Joda时间中的月份是基于1的,而不是基于0的。请注意,到目前为止,您给出的代码甚至不会编译为Java。如果您能给出一个简短但完整的示例,包括结果,作为Java,这会有所帮助;c、 集合(2000,0,1,0,0,0);c、 设置(日历毫秒,0);System.out.println(c.getTimeInMillis()/1000);DateTime dt=新的日期时间(2000,1,1,0,0,0);System.out.println(dt.getMillis()/1000);同意@JonSkeet。我只是对你的意思做了最好的猜测,对它进行了测试并得到了匹配的答案,非常想看看你到底写了什么以及你得到了什么结果。介意具体展示一下你得到了什么结果吗?@Ambrish:不,Joda时代的几个月是基于1的,而不是基于0的。请注意,到目前为止你给出的代码甚至都不会编译为Java。如果您能给出一个简短但完整的示例,包括结果,作为Java,这会有所帮助;c、 集合(2000,0,1,0,0,0);c、 设置(日历毫秒,0);System.out.println(c.getTimeInMillis()/1000);DateTime dt=新的日期时间(2000,1,1,0,0,0);System.out.println(dt.getMillis()/1000);同意@JonSkeet。我只是对你的意思做了一个最好的猜测,对它进行了测试,得到了匹配的答案,非常想看看你到底写了什么和得到了什么结果。奇怪的是,我复制并粘贴了这段代码,在intellij上得到了两个不同的结果。我怀疑这可能是时区问题,但即使我指定了相同的时区,仍然会得到两个不同的结果。奇怪的是,我复制并粘贴了这段代码,在intellij上得到了两个不同的结果。我怀疑这可能是时区问题,但即使我指定了相同的时区,仍然会得到两个不同的结果。