gpt4 book ai didi

java - 将一年添加到 java.util.Calendar 时出现奇怪的结果

转载 作者:搜寻专家 更新时间:2023-11-01 01:20:13 24 4
gpt4 key购买 nike

May, 31 1900 初始化 java.util.Calendar。然后加上一年二十次。

代码如下:

import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*

fun main(args : Array<String>) {
val f = SimpleDateFormat("yyyy.dd.MM")
val cal = Calendar.getInstance()
cal.set(1900, Calendar.MAY, 31)
for(i in 1..20) {
println(f.format(cal.time))
cal.add(Calendar.YEAR, 1)
}
}

输出如下:

1900.31.05
1901.31.05
1902.31.05
1903.31.05
1904.31.05
1905.31.05
1906.31.05
1907.31.05
1908.31.05
1909.31.05
1910.31.05
1911.31.05
1912.31.05
1913.31.05
1914.31.05
1915.31.05
1916.31.05
1917.31.05
1918.01.06
1919.01.06

自 1918 年以来,为什么我得到的是 6 月 1 日而不是 5 月 31 日?

UPD:带有时间信息

1917.31.05 23:38:50.611
1918.01.06 01:38:50.611

如果这是 DST 的发明,我该如何防止呢?

最佳答案

您似乎在 1917 年或 1918 年将偏移量更改了两个小时的时区中运行代码。也就是说,提前或落后 UTC 的小时数发生了变化。我不知道为什么你的时区会那样做,但我确信这是有充分的历史原因的。

如果您只对日期感兴趣,没有时间组件,请使用 java.time.LocalDate 类,它只有效地表示日、月和年。它不受任何夏令时异常的影响。

LocalDate today = LocalDate.now(); 

LocalDate moonLanding = LocalDate.of(1969, 7, 20);

关于java - 将一年添加到 java.util.Calendar 时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49929791/

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