Java.time从偏移量到时区名称
尝试将各种时间格式转换为统一格式 一种格式是Java.time从偏移量到时区名称,java,datetime-format,java-time,timezone-offset,zoneddatetime,Java,Datetime Format,Java Time,Timezone Offset,Zoneddatetime,尝试将各种时间格式转换为统一格式 一种格式是 "uuuu-MM-dd'T'HH:mm:ss-5000" 需要转换为时区格式: "uuuu-MM-dd'T'HH:mm:ss EST" 使用以下代码,但它仅给出时区“-05:00”,而不是预期的“EST” 上述结果是: 2018-02-05T17:25:18 -05:00 如何获得预期的: 2018-02-05T17:25:18 EST -05:00实际上不是时区。这只是一个偏移量:比UTC晚5个小时,你无法真正将其映射到一个时区 截至您使用
"uuuu-MM-dd'T'HH:mm:ss-5000"
需要转换为时区格式:
"uuuu-MM-dd'T'HH:mm:ss EST"
使用以下代码,但它仅给出时区“-05:00”,而不是预期的“EST”
上述结果是:
2018-02-05T17:25:18 -05:00
如何获得预期的:
2018-02-05T17:25:18 EST
-05:00
实际上不是时区。这只是一个偏移量:比UTC晚5个小时,你无法真正将其映射到一个时区
截至您使用的日期(2018年2月2日),共有47个时区使用-05:00
*,包括美国以外的地区-其中许多地区不将其时区称为“EST”,例如利马使用“PET”(秘鲁时间)或波哥大使用“COT”(哥伦比亚时间)。无论每个地方使用的名称是什么,它们都在您使用的日期和时间使用-05:00
无论如何,当您解析偏移量(如-05:00
)时,由于上面列出的原因,API无法知道您所指的时区(不止一个,API本身无法确定)。您必须任意选择一个时区,然后将解析的ZoneDateTime
转换为该时区:
。。。。
ZonedDateTime=ZonedDateTime.parse(origStr,DateTimeFormatter.of模式(origFormat));
//转换为任意时区
时间=时间,包括美国/纽约特区;
我选择“美国/纽约”是因为它在2018年2月使用了“EST”。这样,您的targetStr
将:
2018-02-05T17:25:18美国东部时间
将时区名称更改为所需的名称。请注意,对于6月份纽约夏时制生效的日期,它将返回“EDT”
*:我将JDK 8与2018e TZ数据文件一起使用,因此此数字在您的环境中可能有所不同
2018-02-05T17:25:18 EST