【问题标题】:Java Time Zone code help in GMTGMT 中的 Java 时区代码帮助
【发布时间】: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 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。检查this answer,它演示了如何使用现代日期时间 API 来获取时区偏移量。

标签: java timezone timezone-offset


【解决方案1】:

首先,这样的代码几乎总是是个错误。在日期/时间类型的文本格式方面,Java 提供了很多选项...我建议尽可能使用java.time

但是,就这段代码如何考虑 DST 而言,这是相关的行:

int offSet = tz.getOffset(Calendar.getInstance().getTimeInMillis());

Calendar 的创建毫无意义 - 这会更简单:

int offSet = tz.getOffset(System.currentTimeMillis());

它们都做同样的事情:从 UTC 获取 当前 偏移量。来自TimeZone.getOffset

返回此时区在指定日期与 UTC 的偏移量。如果夏令时在指定日期生效,则偏移值会根据夏令时进行调整。

适用于当前时间,当然 - 它可能在一分钟前有所不同,并且在一分钟后可能有所不同。如果您刚刚格式化了当前日期/时间,那么在该格式和 this 格式之间,时区偏移量可能发生了变化。避免使用此代码的另一个原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2023-03-24
    • 2018-04-17
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多