GMT中的Java时区代码帮助

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

你能帮助理解这段代码吗。看起来它将时区与格林尼治标准时间(以小时为单位)相抵消。但不确定

代码中对DST的考虑是什么

请帮忙

// 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的偏移量。如果夏令时在指定日期生效,则偏移值将根据夏令时的数量进行调整

当然,这只适用于当前时间——一分钟前可能不同,一分钟后也可能不同。如果您刚刚设置了当前日期/时间的格式,则该格式与此格式之间的时区偏移量可能已更改。避免使用此代码的另一个原因