我需要以+/-hh:mm格式保存电话的时区
我使用TimeZone类来处理这个问题,但是我能得到的唯一格式是:
PST -05:00
GMT +02:00我不希望子串结果,有没有键或选项标志,我可以设置为只获得值,而不是该时区的名称(GMT/CET/PST...)?
发布于 2012-07-10 00:46:01
我需要以+/-hh:mm格式保存电话的时区
不,你不需要。偏移量本身是不够的,你需要存储整个时区名称/id。例如,我住在奥斯陆,我现在的偏移量是+02:00,但在冬天(由于dst)它是+01:00。标准时间和夏季时间之间的确切切换取决于您不想探索的因素。
因此,与其存储+ 02:00 (或者应该是+ 01:00?)我将"Europe/Oslo"存储在我的数据库中。现在,我可以使用以下命令恢复完整配置:
TimeZone tz = TimeZone.getTimeZone("Europe/Oslo")想知道我今天的时区偏移量是多少?
tz.getOffset(new Date().getTime()) / 1000 / 60 //yields +120 minutes然而,12月份的情况是一样的:
Calendar christmas = new GregorianCalendar(2012, DECEMBER, 25);
tz.getOffset(christmas.getTimeInMillis()) / 1000 / 60 //yields +60 minutes只需说:存储时区名称或id,每次您想要显示日期时,检查当前的偏移量(今天),而不是存储固定值。您可以使用TimeZone.getAvailableIDs()枚举所有支持的时区ID。
发布于 2013-05-22 06:53:10
@MrBean -我遇到了类似的情况,我不得不调用第三方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;
} 发布于 2017-12-08 02:50:53
现在使用java8,您可以使用
Integer offset = ZonedDateTime.now().getOffset().getTotalSeconds();若要从UTC获取当前系统时间偏移量,请执行以下操作。然后你可以把它转换成你想要的任何格式。我觉得它对我的案子很有用。示例:https://docs.oracle.com/javase/tutorial/datetime/iso/timezones.html
https://stackoverflow.com/questions/11399491
复制相似问题