gpt4 book ai didi

java - Joda的DateTime与java.util.Calendar不一致

转载 作者:行者123 更新时间:2023-12-01 21:58:42 26 4
gpt4 key购买 nike

我使用下面的代码来检查joda的DateTime和java.util.Calendar之间的一致性。这个结果是正确的,但是如果我将 2000 年更改为 1900 年,那么我将得到 2 个不同的结果。这是一个错误还是其他原因导致的?

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

最佳答案

还有别的事:)

import org.joda.time.DateTime; 
import java.util.Calendar;

public class DateTester {

public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(1900,0,1,0,0,0);
c.set(Calendar.MILLISECOND, 0);
System.out.println(c.getTimeInMillis()/1000);
DateTime dt = new DateTime(1900,1,1,0,0,0);
System.out.println(dt.getMillis()/1000);
}
}

结果:

-2208992400
-2208992400

Process finished with exit code 0

这与 UTC 和您的时区之间的偏移有关。我的时区是 1893

import org.joda.time.DateTime;  
import java.util.Calendar;

public class DateTester {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int i = 1900;
boolean found = false;
while (!found) {
c.set(i,0,1,0,0,0);
c.set(Calendar.MILLISECOND, 0);
DateTime dt = new DateTime(i,1,1,0,0,0);
found = !(c.getTimeInMillis() == dt.getMillis());
if (found) {
System.out.println("year: " + i);
System.out.println(c.getTimeInMillis());
System.out.println(dt.getMillis());
}
i--;
}
}
}

结果:

year: 1893
-2429830800000
-2429830408000

UTC 与设定时区之间的偏移量可以在时区数据库中查看

关于java - Joda的DateTime与java.util.Calendar不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33996140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com