我发现有一些类似的问题,例如:
如何从Android设备获取GMT(如GMT+7:00)中的时区偏移量?
但是所有这些答案(+12:00
)都不适用于新西兰夏令时。
当我进行调试时,我从Google日历事件对象中得到了以下信息:
"dateTime" -> "2016-11-06T10:00:00.000+13:00"
那么如何获取正确的偏移量,应该是+13:00
呢?
谢谢。
我发现有一些类似的问题,例如:
如何从Android设备获取GMT(如GMT+7:00)中的时区偏移量?
但是所有这些答案(+12:00
)都不适用于新西兰夏令时。
当我进行调试时,我从Google日历事件对象中得到了以下信息:
"dateTime" -> "2016-11-06T10:00:00.000+13:00"
那么如何获取正确的偏移量,应该是+13:00
呢?
谢谢。
要获取当前与UTC的偏移量(以毫秒为单位,根据夏令时可能会有所变化):
return TimeZone.getDefault().getOffset(System.currentTimeMillis());
return new SimpleDateFormat("Z").format(new Date());
所以,我尝试通过Calendar和SimpleDateFormat获取GMT偏移量,但两者都返回0。我找到了使用Date类中弃用的方法解决的方案。所以,这段代码对我有效。
private double getOffset() {
Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
int defHour = calendar.get(Calendar.HOUR_OF_DAY);
int defMinute = calendar.get(Calendar.MINUTE) + (defHour * 60);
Date date = new Date(System.currentTimeMillis());
int curHour = date.getHours();
int curMinute = date.getMinutes() + (curHour * 60);
double offset = ((double) curMinute - defMinute) / 60;
return offset > 12? -24 + offset : offset;
}
然后您可以格式化结果
这段代码返回给我GMT偏移量。
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault());
Date currentLocalTime = calendar.getTime();
DateFormat date = new SimpleDateFormat("Z");
String localTime = date.format(currentLocalTime);
它返回时区偏移量,例如:+0530