2017-07-14 78 views
-1

我有时间格式转换奇怪的问题。simpledateformat更改时区

我有串,时间= “11:00”

我上面的字符串转换日期和我做了以下内容:

Calendar cal= Calendar.getInstance(); 
cal.setTime(Convert.fromShortTime(timeIn)); // this method is below 

public static SimpleDateFormat SHORT_TIME = new SimpleDateFormat("HH:mm"); 

public static Date fromShortTime(String shortTime) 
{ 
    try { 
     return shortTime == null ? null : SHORT_TIME.parse(shortTime); 
    } catch (ParseException e) { 
     return null; 
    } 
} 

所以cal.setTime(Convert.fromShortTime( timeIn));将数值更改为: Thu Jan 01 10:00:00 PST 1970这比字符串少了1小时。

我的笔记本电脑时间是山区时间和设备时间是太平洋时间。 如果我将笔记本电脑的时间更改为太平洋,那么它的工作正常。

我想知道为什么Android Studio的笔记本电脑时间会影响SimpledateFormat?

回答

2

是的,它确实影响。默认情况下,如果没有指定,则SimpleDateFormat使用系统的默认时区。尝试在方法中指定它(同时,SimpleDateFormat不是线程安全的,因此不要将它用作变量的static):

public static Date fromShortTime(String shortTime){ 
    try { 
     SimpleDateFormat shortTimeFormat = new SimpleDateFormat("HH:mm"); 
     shortTimeFormat.setTimeZone(TimeZone.getTimeZone("PST")); 
     return shortTime == null ? null : shortTimeFormat.parse(shortTime); 
    } catch (java.text.ParseException e) { 
     return null; 
    } 
}