问题描述
我将一个 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
仅此而已!