【发布时间】:2017-04-25 05:51:11
【问题描述】:
你能帮助理解这段代码吗?看起来它正在获取时区作为从格林威治标准时间以小时为单位的偏移量。但不确定...
代码中对夏令时的考虑是什么?
请帮忙。
// Time zone offset in hours from GMT
TimeZone timezone = TimeZone.getDefault();
String result = CCUtil.getTimeZoneOffSet(timezone);
CCUtil.java
public static String getTimeZoneOffSet(TimeZone tz) {
String result = "";
int offSet = tz.getOffset(Calendar.getInstance().getTimeInMillis());
String sign = "-";
if (offSet >= 0)
sign = "+";
else
offSet = Integer.parseInt(Integer.toString(offSet).substring(1));
int minutes = offSet / (1000 * 60);
int hours = minutes / 60;
minutes = minutes % 60;
result = sign + lpad(Integer.toString(hours), "00") + ":"
+ lpad(Integer.toString(minutes), "00");
return result;
}
private static String lpad(String str, String pad) {
int strLen = str.length();
int padLen = pad.length();
String result = str;
if (strLen < padLen) {
result = pad.substring(0, padLen - strLen) + result;
}
return result;
}
【问题讨论】:
-
java.util日期时间 API 及其格式化 APISimpleDateFormat已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。检查this answer,它演示了如何使用现代日期时间 API 来获取时区偏移量。
标签: java timezone timezone-offset