的java 8得到的时区zonedLocalTime
我写一个辅助方法,该方法日期的字符串表示,并返回时区的java 8得到的时区zonedLocalTime
例如:
input: 2017-11-02T09:30:00-07:00
output : "America/Los_Angeles"
(此处的输入为PST我使用UTC偏差-7:00)
Here is my method
public static String getTimeZone(final String date) {
ZonedDateTime zonedDateTime = ZonedDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME);
String timezone = TimeZone.getTimeZone(zonedDateTime.getZone()).getAvailableIDs()[0];
System.out.println(timezone);
return timezone;
}
当我通过在上述日期
,我得到Africa/Abidjan
这完全是不正确。
我更喜欢“America/Los_Angeles”,但至少有一点是正确的。在这里,我所得到的是完全错误的,那时在阿比让和洛杉矶有很大的不同。
什么是正确的方式来到这里?
这里我的建议:
public static String getTimeZone(final String date) {
final ZonedDateTime zonedDateTime = ZonedDateTime.parse(date,DateTimeFormatter.ISO_DATE_TIME);
final TimeZone timeZone = TimeZone.getTimeZone(zonedDateTime.getZone());
return Arrays.stream(TimeZone.getAvailableIDs(timeZone.getRawOffset())).peek(System.out::println).findFirst().get();
}
这里输出
//America/Boise
为什么是博伊西?我期望它是Los_Angeles。 –
具有相同时区的区域列表按名称排序,因此列表中的第一个是America/Boise。 – Aguid
TimeZone.getAvailableIDs()
是一个静态方法,只是返回所有已知的ID为每个区域。
您可以使用TimeZone.getAvailableIDs(int rawOffset)
,它返回给定毫秒偏移量的ID。
对于示例日期/时间
TimeZone tz = TimeZone.getTimeZone(zonedDateTime.getZone());
for (final String id : TimeZone.getAvailableIDs(tz.getRawOffset())) {
System.out.println("id " + id);
}
给出:
id America/Boise
id America/Cambridge_Bay
id America/Chihuahua
id America/Creston
id America/Dawson_Creek
id America/Denver
id America/Edmonton
id America/Fort_Nelson
id America/Hermosillo
id America/Inuvik
id America/Mazatlan
id America/Ojinaga
id America/Phoenix
id America/Shiprock
id America/Yellowknife
id Canada/Mountain
id Etc/GMT+7
id MST
id MST7MDT
id Mexico/BajaSur
id Navajo
id PNT
id SystemV/MST7
id SystemV/MST7MDT
id US/Arizona
id US/Mountain
这是错误的,因为时区应该是Los_Angeles。即PST,但是回收的是MST。通过的输入是PST –
由于您的日期只有偏移量,Java无法知道夏令时是否正在使用,因此它只是在不使用夏令时的情况下给出UTC-7时区。 –
在Java中获取Los_Angeles的时间将节省日光并在请求时给出正确的时间。这是我想拯救Los_Angeles而不是UTC-07:00的原因之一。我现在怎么去转换? –
在这个线程中出了点问题。当您可以使用现代Java日期和时间API(包括'ZonedDateTime')时,我坚信使用过时的'TimeZone'类也没有意义。喜欢现代的'ZoneId'。它的静态'getAvailableZoneIds'方法将为您提供可用的时区。 –