如果我们知道时区ID,是否可以知道大陆/国家的名称?

时间:2013-09-24 13:41:15

标签: java java-ee

我想知道大陆/国家提供的时区ID名称?      例如,

System.out.println(TimeZone.getTimeZone("PDT"));

I wanted answer as north america/america. 

System.out.println(TimeZone.getTimeZone("GMT+05:30"));

I wanted answer as asia/india.

i am not getting the desired output.

The reason of asking question :: I am storing in my database on server the timezone(PDT,GMT+05:30) as given by the mobile    
device.Now i need to perform analytics , that my app was  accessed from which continent/country.

感谢帮助...

2 个答案:

答案 0 :(得分:5)

没有。时区在全球范围内垂直切割,有许多国家拥有相同的时区。

例如,印度位于中国西南部,因此对于某些时区而言,“中国”的答案同样正确。

请访问此网站,查看时区地图及其适用的国家/地区:http://www.timeanddate.com/time/map/

答案 1 :(得分:3)

如果你想向后解决,这可能会有所帮助...... 一些时区包含您要查找的一些信息,例如,尝试:

 for (String s : TimeZone.getAvailableIDs()) {
            System.out.println(s);
 }

输出如下..

...
Europe/Amsterdam
Europe/Andorra
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
Europe/Brussels
Europe/Budapest
Europe/Copenhagen
Europe/Gibraltar
Europe/Ljubljana
Europe/Luxembourg
Europe/Madrid
Europe/Malta
Europe/Monaco
Europe/Oslo
Europe/Paris
...

您可以使用它来获取TimeZones并查看它们所拥有的信息,您可以获得所需的信息,尽管工作量很大。

System.out.println(TimeZone.getTimeZone("Europe/Amsterdam"));
System.out.println(TimeZone.getTimeZone("UTC"));

输出

sun.util.calendar.ZoneInfo[id="Europe/Amsterdam",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=180,lastRule=java.util.SimpleTimeZone[id=Europe/Amsterdam,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

使用偏移量,您可以计算出与UTC时间的关系。即使在您不考虑夏令时等的简单情况下,这也非常复杂,棘手且耗时。可能,我会说。