我需要以 [+/-]hh:mm 格式保存手机的时区
我正在使用 TimeZone 类来处理这个问题,但我可以获得的唯一格式如下:
PST -05:00
GMT +02:00
我宁愿不对结果进行子字符串化,是否有任何键或选项标志我可以设置为只获取值而不是该时区的名称(GMT/CET/PST …)?
原文由 Mr Bean 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要以 [+/-]hh:mm 格式保存手机的时区
我正在使用 TimeZone 类来处理这个问题,但我可以获得的唯一格式如下:
PST -05:00
GMT +02:00
我宁愿不对结果进行子字符串化,是否有任何键或选项标志我可以设置为只获取值而不是该时区的名称(GMT/CET/PST …)?
原文由 Mr Bean 发布,翻译遵循 CC BY-SA 4.0 许可协议
@MrBean - 我遇到了类似的情况,我不得不调用第 3 方 Web 服务并以 +/-hh:mm 格式传入 Android 设备的当前时区偏移量。这是我的解决方案:
public static String getCurrentTimezoneOffset() {
TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz);
int offsetInMillis = tz.getOffset(cal.getTimeInMillis());
String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60));
offset = (offsetInMillis >= 0 ? "+" : "-") + offset;
return offset;
}
原文由 PuguaSoft 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
不,你不知道。偏移量本身是不够的,您需要存储整个时区名称/ID。例如,我住在奥斯陆,我当前的偏移量是 +02:00,但在冬天(由于 dst )是 +01:00。标准时间和夏令时之间的确切切换取决于您不想探索的因素。
因此,我没有存储
+ 02:00
(或者应该是+ 01:00
?),而是存储"Europe/Oslo"
在我的数据库中。现在我可以使用以下方法恢复完整配置:想知道我今天的时区偏移量是多少?
然而,在 12 月也是如此:
足以说明:存储时区名称或 ID,每次你想显示日期时,检查当前偏移量(今天)是多少,而不是存储固定值。您可以使用
TimeZone.getAvailableIDs()
枚举所有支持的时区 ID。