gpt4 book ai didi

java - Joda Time 1900年号

转载 作者:行者123 更新时间:2023-12-01 23:42:44 25 4
gpt4 key购买 nike

日期1900-01-01

DateTimeFormatter fmt = ISODateTimeFormat.date();
return fmt.withZone(DateTimeZone.forTimeZone(zone)).print(date.getTime());

输出为1899-12-31。为什么会出现这个错误?如何解决?

最佳答案

java 的 Date 和 joda 的 DateTime1900-01-01 存在 30 分钟的差异。 (java.sql.Datejava.util.Date 的子类)

所以,这不是格式化程序问题。研究以下代码并检查输出:

Date javaDate = new SimpleDateFormat("yyyy-MM-dd").parse("1900-01-01");
System.out.printf("%s, %d\n", javaDate, javaDate.getTime());

DateTime jodaDate1 = new DateTime(1900, 1, 1, 0, 0, 0);
System.out.printf("%s, %d\n", jodaDate1, jodaDate1.getMillis());

DateTime jodaDate2 = new DateTime(javaDate.getTime());
System.out.printf("%s, %d\n", jodaDate2, jodaDate2.getMillis());

当您检查输出时,您可以看到相同的毫秒值表示为不同的日期。如果将日期更改为 1900-01-02,则日期及其毫秒值相同。

因此,似乎您应该从 java 的 Date 中提取每个字段,并使用字段值创建 joda 的 DateTime 实例,如下所示:

Calendar cal = Calendar.getInstance();
cal.setTime(javaDate);
DateTime dt = new DateTime(cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH)+1,
cal.get(Calendar.DATE), 0, 0, 0);

关于java - Joda Time 1900年号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17667774/

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