2013-08-26 83 views
0
String = 26/8/2013 15:59; 

我想將此日期轉換爲GMT,但是在應用以下代碼後,我得到了EEST時間而不是GMT。在java/android中獲取錯誤時區

DateFormat df = new SimpleDateFormat("dd/MM/yyyy h:m"); 
df.setTimeZone(TimeZone.getTimeZone("UTC")); 
df.parse(newDate); 
Log.i(tag, df.parse(newDate).toString()); 

輸出:

Mon Aug 26 18:59:00 EEST 2013 

的哪些錯誤?

回答

2

您的解析是正確的,不同的只是您的區域設置時區,用於在製作toString()時顯示。我只是使用格式化輸出來演示正確的格式。下面是詳細信息例如:

final String time = "26/8/2013 15:59"; 
TimeZone timeZone = TimeZone.getTimeZone("UTC"); 
final String REQUEST_DATE_FORMAT = "dd/MM/yyyy h:m"; 

DateFormat format = new SimpleDateFormat(REQUEST_DATE_FORMAT); 
Date localDate = format.parse(time); 

// localDate.toString() 
// PRINT. Mon Aug 26 15:59:00 EEST 2013 

Calendar cal = Calendar.getInstance(timeZone); 
cal.setTime(localDate); 

format.setTimeZone(timeZone); 
final String utcTime = format.format(cal.getTime()); 
// PRINT. 26/08/2013 12:59 
+0

@ShamimAhmedd,我的設備的區域設置和GMT之間的區別是+3 ..但是我無法在3小時後得到GMT .. – tony9099

+0

@ tony9099,首先您將日期解析爲UTC(15:59),但是當您嘗試以你的本地格式顯示(比如18:59),這是正確的。正如你在解析之前設置時區一樣。但是,如果您在解析日期後設置時區,則會得到UTC = 1:59和本地= 15:59。你必須確定你的源格式是什麼。 UTC或本地。 –

+0

它是本地的。如果您相應更新代碼,我將非常感激。使事情更清楚:final String time =「26/8/2013 15:59」; <本地...我想要這在UTC是12:59 – tony9099

0

沒有什麼是錯的。您正在成功解析解釋爲UTC時區的日期時間字符串。

將其打印到日誌時,會得到您要求的內容 - Date.toString()將格式化爲當前語言環境設置的日期返回到包含時區的設置。 UTC和EEST的區別是3小時。

如果您想要將其格式化爲顯示其他時區,請將其配置爲所需時區的SimpleDateFormatformat()

+0

應該在哪裏調用.format?在df.parse(newDate)之前;或之後? – tony9099

0

我認爲你應該使用下面的方法: 日期指明MyDate =新的日期();

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeZone(TimeZone.getTimeZone("UTC")); 
calendar.setTime(myDate); 
Date time = calendar.getTime(); 
SimpleDateFormat outputFmt = new SimpleDateFormat("MMM dd, yyy h:mm a zz"); 
String dateAsString = outputFmt.format(time); 
System.out.println(dateAsString);