2014-05-07 35 views
0

我试图将GMT时间转换为当前时区(即GMT -7,加利福尼亚州确切),但时间不到1小时。Android Calendar从GMT转换为当前时区后1小时后关闭

下面是我从检索值的字符串的一个例子: 2014-05-07T02:02:04.316Z

所以我的正确的时间(而不是下午7点02分的18:02)1-小时空头。为什么是这样?

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; 
} 

回答

0

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

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

+1

这固定了它。谢谢!完全忘记了DST /额头贴 –