如何从java中的时区偏移量获取时区?

Ano*_*One 5 java timezone calendar gregorian-calendar timezone-offset

我知道如何得到相反的结果。给定一个时区,我可以通过以下代码片段获取时区偏移量:

TimeZone tz = TimeZone.getDefault();
System.out.println(tz.getOffset(System.currentTimeMillis()));
Run Code Online (Sandbox Code Playgroud)

我想知道如何从时区偏移量获取时区名称。

鉴于,

timezone offset = 21600000(以毫秒为单位;+6.00 偏移量)

我想获得以下任何可能的时区名称的结果:

(GMT+6:00) Antarctica/Vostok
(GMT+6:00) Asia/Almaty
(GMT+6:00) Asia/Bishkek
(GMT+6:00) Asia/Dacca
(GMT+6:00) Asia/Dhaka
(GMT+6:00) Asia/Qyzylorda
(GMT+6:00) Asia/Thimbu
(GMT+6:00) Asia/Thimphu
(GMT+6:00) Asia/Yekaterinburg
(GMT+6:00) BST
(GMT+6:00) Etc/GMT-6
(GMT+6:00) Indian/Chagos
Run Code Online (Sandbox Code Playgroud)

Har*_*hvi 2

使用TimeZone#getAvailableIDs(int)

import java.util.*;
class Hello
{
   public static void main (String[] args) throws java.lang.Exception
   {
     TimeZone tz = TimeZone.getDefault();
     int offset = 21600000;
     String[] availableIDs = tz.getAvailableIDs(offset);
     for(int i = 0; i < availableIDs.length; i++) {
       System.out.println(availableIDs[i]);
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 你为什么要使用“TimeZone.getDefault()”?这段代码会更好,如“String[] ids = TimeZone.getAvailableIds(21600000L);”。避免像调用实例方法一样调用静态方法。 (4认同)
  • 请注意,这仅返回*标准时间*偏移匹配的条目。例如,传递“-25200000”不会返回“America/Los_Angeles”,它在夏令时期间使用该偏移量。 (3认同)