2011-09-02 157 views
15

我试图在android中获取UTC偏移量。由于模拟器不断返回0,我不知道我是否正确地做到了这一点。如何在秒钟内获取UTC偏移量android

Calendar c=Calendar.getInstance(); 
     TimeZone tz=c.getTimeZone(); 
     int offsetFromUtc=tz.getOffset(0)/1000; 

当我把0放在tz.getOffset中,这意味着我只想从gmt中得到秒数。 让我知道我在做什么是正确的。谢谢

回答

42

时区偏移量可能会在一年中发生变化,也许最常见的原因是夏令时。而不是将0至TimeZone.getOffset()的使用当前时间来得到当前偏移,创建一个新的日期,并得到其时间价值:

TimeZone tz = TimeZone.getDefault(); 
Date now = new Date(); 
int offsetFromUtc = tz.getOffset(now.getTime())/1000; 

模拟器默认为UTC,尝试检查可用的时区进行测试。您还可以通过时区开关设置时区,check the documentation用于时区。

+0

我忘了夏令时,感谢您的高举 –

+0

这实际上并不完整。并非所有的时区都是全天候的,委内瑞拉的时区都是小数点,例如-4.5。这应该是一个float/double而不是int。 – Dev2rights

+2

[getOffset](http://developer.android.com/reference/java/util/TimeZone.html#getOffset(long))为分数时区返回int,精度很高,一直到秒。 –

4

模拟器的默认时区是格林尼治标准时间,这意味着您将始终得到0的偏移量。 您的代码看起来很好(我没有尝试它)。 尝试将模拟器的时区更改为其他内容并检查您的代码。 看一看这个开放的帖子:Link

相关问题