2014-07-16 147 views
0

我正在嘗試寫入一些字符串,其格式爲UTC時間,並將其格式化爲從手機抓取的本地時區。然而,儘管看着SimpleDateFormat documentation,我整個錯誤運行我的樣本字符串是不可解析:當通過SimpleDateFormat解析UTC字符串到日期時解析日期錯誤

W/System.err﹕ java.text.ParseException: Unparseable date: "2014-07-16T21:00:00:000+0000" (at offset 19) 
W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:555) 
[...] 
D/Set time:﹕ Wed Jul 16 15:10:03 PDT 2014 
D/TimeInMilli:﹕ 1405548603565 

代碼:

Calendar cal = Calendar.getInstance(); 
TimeZone tz = cal.getTimeZone(); //Get phone's PST zone 

String UTCinput = "2014-07-16T21:00:00:000+0000"; //2:00PM PST 
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
format.setTimeZone(tz); 

Date dateCal = new Date(); 

try { 
    dateCal = format.parse(UTCinput); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

cal.setTime(dateCal); 
Log.d("Set time: ", String.valueOf(dateCal)); 
Log.d("TimeInMilli: ", String.valueOf(cal.getTimeInMillis())); 

什麼是我解析的方式的問題?

+0

當運行到這種神祕,複製粘貼示例代碼。 StackOverflow.com包含您在發佈之前可能嘗試的SimpleDateFormat代碼示例。 –

+1

提示:使用[Joda-Time](http://www.joda.org/joda-time/)或[java.time](http://docs.oracle.com/javase/8/docs/api /java/time/package-summary.html)庫而不是java.util.Date&SimpleDateFormat,這是非常麻煩的。您可以直接傳遞[ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)兼容字符串,而無需格式化/轉換。 'DateTime dateTime = new DateTime(「2014-07-16T21:00:00:000 + 0000」);' –

回答

2

你輸入String需要符合DateFormat模式

String UTCinput = "2014-07-16T21:00:00.000+0000"; //2:00PM PST 
             ^--- was ":"