GMT中的Java时区代码帮助
你能帮助理解这段代码吗。看起来它将时区与格林尼治标准时间(以小时为单位)相抵消。但不确定 代码中对DST的考虑是什么 请帮忙GMT中的Java时区代码帮助,java,timezone,timezone-offset,Java,Timezone,Timezone Offset,你能帮助理解这段代码吗。看起来它将时区与格林尼治标准时间(以小时为单位)相抵消。但不确定 代码中对DST的考虑是什么 请帮忙 // Time zone offset in hours from GMT TimeZone timezone = TimeZone.getDefault(); String result = CCUtil.getTimeZoneOffSet(timezone); CCUtil.java public static String g
// 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;
}
//从GMT开始的时区偏移量(小时)
时区TimeZone=TimeZone.getDefault();
字符串结果=CCUtil.getTimeZoneOffSet(时区);
CCUtil.java
公共静态字符串getTimeZoneOffSet(时区tz){
字符串结果=”;
int offSet=tz.getOffset(Calendar.getInstance().getTimeInMillis());
字符串符号=“-”;
如果(偏移量>=0)
符号“+”;
其他的
offSet=Integer.parseInt(Integer.toString(offSet.substring)(1));
整数分钟=偏移量/(1000*60);
整小时=分钟/60;
分钟=分钟%60;
结果=符号+lpad(整数.toString(小时),“00”)+:“
+lpad(整数.toString(分钟),“00”);
返回结果;
}
专用静态字符串lpad(字符串str、字符串pad){
int strLen=str.length();
int padLen=pad.length();
字符串结果=str;
if(strLen
首先,像这样的代码几乎总是一个错误。当涉及到日期/时间类型的文本格式时,Java提供了很多选项。。。我建议尽量使用java.time
然而,就本规范如何考虑DST而言,这是相关的一行:
int offSet = tz.getOffset(Calendar.getInstance().getTimeInMillis());
创建日历
是毫无意义的-这将更简单:
int offSet = tz.getOffset(System.currentTimeMillis());
它们都做相同的事情:从UTC获取当前偏移量。发件人:
返回指定日期此时区相对于UTC的偏移量。如果夏令时在指定日期生效,则偏移值将根据夏令时的数量进行调整
当然,这只适用于当前时间——一分钟前可能不同,一分钟后也可能不同。如果您刚刚设置了当前日期/时间的格式,则该格式与此格式之间的时区偏移量可能已更改。避免使用这种代码的另一个原因。首先,像这样的代码几乎总是一个错误。当涉及到日期/时间类型的文本格式时,Java提供了很多选项。。。我建议尽量使用
java.time
然而,就本规范如何考虑DST而言,这是相关的一行:
int offSet = tz.getOffset(Calendar.getInstance().getTimeInMillis());
创建日历
是毫无意义的-这将更简单:
int offSet = tz.getOffset(System.currentTimeMillis());
它们都做相同的事情:从UTC获取当前偏移量。发件人:
返回指定日期此时区相对于UTC的偏移量。如果夏令时在指定日期生效,则偏移值将根据夏令时的数量进行调整
当然,这只适用于当前时间——一分钟前可能不同,一分钟后也可能不同。如果您刚刚设置了当前日期/时间的格式,则该格式与此格式之间的时区偏移量可能已更改。避免使用此代码的另一个原因