【问题标题】:Get real device TimeZone on Android even if setDefault was called即使调用了 setDefault,也可以在 Android 上获取真实设备 TimeZone
【发布时间】:2017-02-15 17:57:13
【问题描述】:

假设应用程序中有一个组件使用 TimeZone.setDefault() 覆盖默认时区,我们假设这没问题!
(我认为这是一个不好的做法,但为了这个问题,让我们随它去吧。)

在一些非常有限的情况下,我仍然需要实际设备的时区,但TimeZone.getDefault() 将提供覆盖的值。

有没有办法在不询问 Java 的 TimeZone#getDefault 的情况下查询设备的实际时区(在 Android 设置中设置/由网络提供)?

【问题讨论】:

  • 你不能只缓存提供给运行你的应用程序的 JVM 的原始时区吗?
  • 看看here,这可能有用

标签: java android timezone


【解决方案1】:

您可以使用互联网,使用此 API 请求(来自 lat long):

http://api.geonames.org/timezoneJSON?formatted=true&lat=44&lng=11&username=demo

它返回:

 {
  "sunrise": "2017-02-15 07:15",
  "lng": 11,
  "countryCode": "IT",
  "gmtOffset": 1,
  "rawOffset": 1,
  "sunset": "2017-02-15 17:45",
  "timezoneId": "Europe/Rome",
  "dstOffset": 2,
  "countryName": "Italy",
  "time": "2017-02-15 19:27",
  "lat": 44
}

【讨论】:

  • 这不符合用户偏好。如果您进入设置,您实际上可以将您的时区更改为您所在位置以外的其他时间。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2015-12-20
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多