gpt4 book ai didi

java - 1900 年之前的 JodaTime 和 Calendar 之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:56:12 26 4
gpt4 key购买 nike

在使用 JodaTime 库和 java.util.Calendar 时,我得到了过去同一日期的不同值(以毫秒为单位)。例如公元元年

void test() {
int year = 1;
DateTime dt = new DateTime(year, 1,1,0,0,0,0);
dt = dt.toDateTime(GregorianChronology.getInstance());

Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(year, 0, 1, 0, 0, 0);

DateTime endDate = new DateTime(cal.getTimeInMillis());
endDate = endDate.toDateTime(GregorianChronology.getInstance());

System.out.println("JodaTime: " + dt);
System.out.println("JodaTime, ms: " + dt.getMillis());
System.out.println("Calendar: " + cal.getTime());
System.out.println("Calendar, ms: " + cal.getTimeInMillis());
System.out.println("JodaTime by Calendar: " + endDate);
}

默认情况下,DateTime 使用 ISOChronology,Calendar 是 GregorianCalendar(TH 和 JA 语言环境除外)。所以我设置了 GregorianChronology,但没有任何改变。执行结果为

JodaTime:       0001-01-01T00:00:00.000+01:34:52
JodaTime, ms: -62135602492000
Calendar: Sat Jan 01 00:00:00 EET 1
Calendar, ms: -62135776800000
JodaTime by Calendar: 0000-12-29T23:34:52.000+01:34:52

有人可以建议我做错了什么吗?

最佳答案

猜测是这与您所在的时区有关。指定 UTC 以将其从等式中删除。

一些时区(例如巴黎)有一些“有趣”的转变。

例如,zoneinfo 表明 Europe/Athens 在 1916 年之前的偏移量为 1:34:52(在 1895 年从 LMT 的缩写转换为 AMT)。

白俄罗斯在 1880 年之前的偏移量为 1:50:16。

也许 Java 正在使用不同的时区数据源,其中不包括这些奇怪的地方?

关于java - 1900 年之前的 JodaTime 和 Calendar 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680198/

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