我想改变一个瞬间的时间:
Instant instant = Instant.parse("2016-03-23T17:14:00.092812Z");
LocalTime newTime = LocalTime.parse("12:34:45.567891");
instant.with(newTime);
我期望在相同的日期获得一个瞬间,但新的时间,即2016-03-23 12:34:45.567891。
但它引发了异常:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: NanoOfDay
at java.time.Instant.with(Instant.java:720)
at java.time.Instant.with(Instant.java:207)
at java.time.LocalTime.adjustInto(LocalTime.java:1333)
at java.time.Instant.with(Instant.java:656)
任何想法如何解决?
答案 0 :(得分:4)
“即时”没有本地日历日期或本地时间的概念。其方法toString()
描述了UTC时间轴上的日期和时间偏移UTC + 00的时刻:00,但它仍然是一个时刻,而不是具有当地背景的信息。
但是,您可以使用以下转换。转换为本地时间戳,操纵本地时间戳,然后转换回即时/时刻。 看到转换取决于具体的时区非常重要。
Instant instant = Instant.parse("2016-03-23T17:14:00.092812Z");
LocalTime newTime = LocalTime.parse("12:34:45.567891");
// or choose another one, the conversion is zone-dependent!!!
ZoneId tzid = ZoneId.systemDefault();
Instant newInstant =
instant.atZone(tzid).toLocalDate().atTime(newTime).atZone(tzid).toInstant();
System.out.println(newInstant); // 2016-03-23T11:34:45.567891Z (in my zone Europe/Berlin)
答案 1 :(得分:3)
立即设置时间并没有多大意义。您需要一个时区来设置时间。将Instant转换为ZonedDateTime,选择时区。然后在ZonedDateTime上设置时间。然后将ZonedDateTime转换为Instant:
假设时间是UTC时区:
Array<string>