gpt4 book ai didi

Java Date toInstant 方法返回不同的日期?

转载 作者:行者123 更新时间:2023-12-04 09:13:17 31 4
gpt4 key购买 nike

这是我的测试代码,日期 1111-11-11即时方法结果是 1111-11-17

jshell> new Date(-789,10,11)
$8 ==> Sat Nov 11 00:00:00 JST 1111

jshell> new Date(-789,10,11).toInstant();
$9 ==> 1111-11-17T15:00:00Z

最佳答案

我建议您从过时且容易出错的旧式日期时间 API 切换到 modern date-time API .

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class Main {
public static void main(String args[]) {
OffsetDateTime odt = OffsetDateTime.of(1111, 11, 11, 0, 0, 0, 0, ZoneOffset.UTC);
Instant instant = odt.toInstant();
System.out.println(instant);
}
}
输出:
1111-11-11T00:00:00Z
如何使用旧的日期时间 API 做到这一点:
请注意 1582-10-15 之前的日期作为儒略历处理。查询 https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html更多细节。另请查看 https://stackoverflow.com/a/23460471/10819573我已经提到编写以下代码:
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Main {
public static void main(String args[]) throws ParseException {
GregorianCalendar proleptic = new GregorianCalendar();
proleptic.clear();
proleptic.setGregorianChange(new Date(Long.MIN_VALUE));
proleptic.set(Calendar.DAY_OF_MONTH, 11);
proleptic.set(Calendar.MONTH, Calendar.NOVEMBER);
proleptic.set(Calendar.YEAR, 1111);
System.out.println(proleptic.toInstant());
}
}
输出:
1111-11-11T00:00:00Z

关于Java Date toInstant 方法返回不同的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63313261/

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