将即时转换为 LocalDate 并得到 java.time.DateTimeException: Invalid value for Year

问题描述

我将一个 Instant 转换为 LocalDate,这是我的实现:

theInstant.atZone(ZoneId.systemDefault()).toLocalDate();

但是,我在 Junit 测试中得到了异常: java.time.DateTimeException: 年的无效值(有效值 -999999999 - 999999999):-1000000000

有人可以帮忙吗?

谢谢!

解决方法

问题在于,无论您提供什么瞬间,它都必须在 -999999999 to 999999999 的范围内,其中 0 是纪元。您可以通过多种方式创建瞬间。一种是指定当前日期。

LocalDate ld = Instant.now().atZone(ZoneId.systemDefault()).toLocalDate();      
System.out.println(ld);

印刷品

2021-03-05

另一个是在某个时间单位给它一个值。这是一秒钟。

    LocalDate ld = Instant.ofEpochSecond(1229998889L)
           .atZone(ZoneId.systemDefault()).toLocalDate();

印刷品

2008-12-22
            
,

一旦您拥有 LocatDate

    LocalDate localDate = LocalDate.now();  //local date

    LocalDateTime localDateTime = localDate.atTime(10,45,56);  //Add time information

    ZoneId zoneId = ZoneId.of("Asia/Kolkata"); // Zone information you can present ZoneId.systemDefault() here

    ZonedDateTime zdtAtAsia = localDateTime.atZone(zoneId); // add zone information

    ZonedDateTime zdtAtET = zdtAtAsia
            .withZoneSameInstant(ZoneId.of("America/New_York")); // Same time in ET timezone
     

仅此而已!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...