在安卓系统中获取时区

7
有没有办法从接收到的回调中获取时区信息?
void onLocationChanged(Location location)  

利用从位置参数获取的时间信息

long Time = location.getTime();

如果有其他方法,请提供相关信息!

你应该详细说明你的问题,因为显然没有明确的解决方案。 - Doomsday
3个回答

3
您可以使用geonames.org提供的Web服务。 提供纬度和经度以获取时区信息。 http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2:
{"time":"2010-07-24 18:35","countryName":"Austria","sunset":"2010-07-24 21:02","rawOffset":1,"dstOffset":2,"countryCode":"AT","gmtOffset":1,"lng":10.2,"sunrise":"2010-07-24 05:48","timezoneId":"Europe/Vienna","lat":47.01}

可能那样做可以行,但我想要不依赖于互联网连接的东西。也许可以在我的应用程序中实现相同的算法。 - rantravee
这是可能的,但您需要将国家、位置和时区的数据库与您的应用程序一起分发。另外请注意,夏令时信息可能会在两周内更改。 - CrazyCoder

2

您可以使用java.util.TimeZone调用TimeZone.getDefault()来获取有关当前时区的信息,例如:

java.util.TimeZone tz = java.util.TimeZone.getDefault();
Toast.makeText(context, tz.getDisplayName(), Toast.LENGTH_LONG).show();

1
正确,但这将返回手机的时区,可能不正确或者不准确,因为用户正在旅行。 - rantravee
1
好的,那我之前误解了您的意图。由于位置时间始终是UTC时间,我认为目前没有机制支持这一点。这将需要某种地理编码到时区映射,这在一些GPS设备中存在。也许这是Android未来的一个功能... - Thorstenvv
我认为当在漫游到另一个国家时,Android会自动建议更改默认时区。 - m_vitaly

0
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+"   Timezon id :: " + tz.getID());

输出

TimeZone   GMT+09:30   Timezon id :: Australia/Darwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接