当前位置: 首页 > 知识库问答 >
问题:

将日期转换为LocalDate,返回200ad左右奇怪的结果

范文昌
2023-03-14
  private LocalDate toLocalDate(Date localDate)
  {
    return LocalDateTime.ofInstant(localDate.toInstant(), ZoneId.systemDefault()).toLocalDate();
  }
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
String dateString = "Tue Jan 01 00:00:00 CAT 200";
String dateString2 = "Tue Jan 01 00:00:00 CAT 201";
String dateString3 = "Wed Dec 31 00:00:00 CAT 200";

System.out.println(toLocalDate(simpleDateFormat.parse(dateString)));
System.out.println(toLocalDate(simpleDateFormat.parse(dateString2)));
System.out.println(toLocalDate(simpleDateFormat.parse(dateString3)));
0200-01-01
0201-01-01
0200-12-31
0199-12-31
0201-01-01
0200-12-31

所以看起来第一个被稍微回滚,可能是cat时区对应的两个小时?但为什么这种情况只发生在一个案子上呢?用2000年做同样的实验不会产生同样的错误。

共有1个答案

叶谦
2023-03-14

斯蒂芬已经在评论中提供了解释。基本上,java.util.date使用的日历系统介于1582年的儒略历系统和公历系统之间,跳过10天。因此,1582年或之前的日期会出现差异--但差异的大小会随着时间的推移而变化--平均每400年有3天的差异。碰巧在200和400AD之间,你看不到这一点,因为这对应于当差异为0时。

下面是一个简短但完整的程序来演示这个问题:

import java.time.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws Exception {
        // Value obtained with Noda Time: should be 0199-12-31T22:00:00Z.
        long millis = -55855792800000L;
        Instant instant = Instant.ofEpochMilli(millis);
        Date date = new Date(millis);
        System.out.println(instant);
        System.out.println(date);
    }
}

我的计算机上的输出:

0199-12-31T22:00:00Z
Tue Jan 01 22:00:00 GMT 200
 类似资料:
  • 问题内容: 我正在使用Python访问某些Web服务的移动API,响应中包含以下奇怪的日期表示法:这应该是2014年9月1日。 我不确定这是哪种格式,但是我想将其转换为可读的格式,即a或a或Unix时间。 有人可以帮我吗? 问题答案: 时间字符串看起来像[Datetime的OData版本2JSON详细格式,可以在旧的ASP.NET或WCF应用程序中看到: “ / Date( [“ +” |“-”

  • 我尝试解析时间格式化字符串,现在当我解析字符串“2014-01-07 95:25:37”时,它返回一个日期,而不是抛出ParseException。谁知道如何让它抛出异常。谢谢乔治。 输出:

  • 我有以下应该返回时间戳的函数。当使用以下斜杠以字符串格式输入日期时,此代码有效:“2019/3/4”,但在使用 怎么回事?

  • 问题内容: 我从JavaScript进行$ getJSON调用得到以下结果。如何在JavaScript中将start属性转换为正确的日期? [{“ id”:1,“ start”:“ / Date(1238540400000)/”},{“ id”:2,“ start”:“ / Date(1238626800000)/”}] 谢谢! 问题答案: 您需要从字符串中提取数字,并将其传递给Date : 这些

  • 我使用Spring靴和Spring4。 我尝试使用Java 8 LocalDate。 在json中输入日期 出生日期:“1969-12-29” 在服务器端这个领域我有 我得到这个错误 组织。springframework。http。转换器。HttpMessageNoteableException:无法读取文档:无法从字符串值('1969-12-29')实例化类型为[简单类型,类java.time.