我不清楚何时使用appendZoneId()以及何时使用appendZoneOrOffsetId()
在 java DateTimeFormatterBuilder
在java文档中说两者都附加ZoneId或OffsetId,那么appendZoneId()和appendZoneOrOffsetId()之间的区别是什么
请注意,除了用于获取区域的机制之外,此方法与 appendZoneId() 相同。
获取区域的机制差异如下:
在实践中,您是否会看到差异取决于您尝试格式化的日期时间类型 - 它是否包含区域 ID 还是仅包含偏移量。考虑以下代码:
public static void main(String[] args) {
DateTimeFormatter dtfZ = new DateTimeFormatterBuilder().appendZoneId().toFormatter();
DateTimeFormatter dtfZO = new DateTimeFormatterBuilder().appendZoneOrOffsetId().toFormatter();
tryPrint(ZonedDateTime.now(), dtfZ, "appendZoneId");
tryPrint(ZonedDateTime.now(), dtfZO, "appendZoneOrOffsetId");
tryPrint(OffsetDateTime.now(), dtfZ, "appendZoneId");
tryPrint(OffsetDateTime.now(), dtfZO, "appendZoneOrOffsetId");
}
private static void tryPrint(TemporalAccessor dt, DateTimeFormatter dtf, String description) {
System.out.printf("Trying to format %s using %s:%n\t", dt, description);
try {
System.out.println(dtf.format(dt));
} catch (DateTimeException e) {
System.out.println(e);
}
System.out.println();
}
输出:
Trying to format 2024-09-24T13:08:10.042968898+01:00[Europe/London] using appendZoneId:
Europe/London
Trying to format 2024-09-24T13:08:10.045608600+01:00[Europe/London] using appendZoneOrOffsetId:
Europe/London
Trying to format 2024-09-24T13:08:10.046282182+01:00 using appendZoneId:
java.time.DateTimeException: Unable to extract ZoneId from temporal 2024-09-24T13:08:10.046282182+01:00
Trying to format 2024-09-24T13:08:10.046858510+01:00 using appendZoneOrOffsetId:
+01:00
如您所见,如果您想使用区域 ID 格式化日期时间,那么您可以使用其中之一。但如果你只有偏移量而不是区域,那么你需要使用
appendZoneOrOffsetId
。