从GMT转换为当前时区后,Android日历时间缩短1小时

时间:2014-05-07 02:49:55

标签: android calendar timezone android-calendar

我正在尝试将GMT时间转换为我当前的时区(确切地说是GMT-7,加利福尼亚州),但它落后了1小时。

以下是我从以下位置检索值的字符串示例: 2014-05-07T02:02:04.316Z

所以我比正确的时间短了1小时(下午6:02而不是下午7:02)。这是为什么?

private Calendar setTimeStamp(String s) {
    int year = Integer.parseInt(s.substring(0, 4));
    int month = Integer.parseInt(s.substring(5, 7)) - 1;
    int day = Integer.parseInt(s.substring(8, 10));
    int hour = Integer.parseInt(s.substring(11, 13));
    int minute = Integer.parseInt(s.substring(14, 16));

    Calendar gmtCal = Calendar.getInstance();
    gmtCal.set(year, month, day, hour, minute);

    long gmtTimeInMillis = gmtCal.getTimeInMillis();
    long currentTimeInMillis = gmtTimeInMillis + TimeZone.getDefault().getRawOffset();
    Calendar adjustedCal = Calendar.getInstance(TimeZone.getDefault());
    adjustedCal.setTimeInMillis(currentTimeInMillis);

    return adjustedCal;
}

1 个答案:

答案 0 :(得分:0)

这一小时的差异可能是由于夏令时造成的。 Clock changes for California

但是,您可以参考TimeZone类中的 getDSTSavings()函数来获取您所在时区的当前DST偏移量。