2014-10-29 145 views
2

我目前正在爲我的一個應用程序開發同步模塊。我正在根據LastUpdated時間同步本地和服務器之間的記錄,這不過是一個時間戳。服務器是新加坡的,那麼如何在我的Android應用程序中設置時區到新加坡?JAVA:獲取不同時區的時間

我都試過了,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); 
sdf.setTimeZone(TimeZone.getTimeZone("VST")); 

,並

Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("Asia/Singapore")); 
System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); 

仍然沒有運氣。

或者有什麼辦法可以爲本地和服務器設置公共時區?服務器端語言是ASP.Net

+0

可能重複的[如何設置時區的java.util.Date?](http://stackoverflow.com/questions/2891361/how-to-set-time-zone-of-a-java- util-date) – 2014-10-29 07:13:36

回答

3

您的SimpleDateFormat示例幾乎是正確的。我相信你需要SGT爲新加坡,你需要撥打DateFormat.format(Date)。你也可以通過TimeZoneCalendar.getInstace(TimeZone)

TimeZone tz = TimeZone.getTimeZone("SGT"); 
sdf.setTimeZone(tz); 
System.out.println(sdf.format(Calendar.getInstance().getTime())); 
System.out.println(Calendar.getInstance(tz)); 
+0

我嘗試了你的解決方案,並得到了'AM_PM = 0,HOUR = 2,HOUR_OF_DAY = 2,MINUTE = 18'的結果,但我相信新加坡的時間大概是在12:45 PM左右。爲什麼有區別? – Aniruddha 2014-10-29 04:48:27

+0

[新加坡](http://en.wikipedia.org/wiki/Singapore_Standard_Time)的時間也可以通過「UTC + 8」或谷歌搜索獲得。根據此[表](http://docs.oracle.com/cd/B10191_01/calendar.903/b10094/timezone.htm),您也可以使用「UCT-8」。但是如果我有錯誤的時區,應該有可能找到一個有效的。 – 2014-10-29 04:55:12

+0

謝謝,我也試過,但它仍然是一樣的。任何事情都可以在服務器端完成?像將它設置爲一些常見的時區? – Aniruddha 2014-10-29 04:57:59

0

最後,這是我如何解決它。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); 
TimeZone tz = TimeZone.getTimeZone("Asia/Singapore"); 
sdf.setTimeZone(tz); 

java.util.Date date= new java.util.Date(); 
Timestamp local = new Timestamp(date.getTime()); 
String strDate = sdf.format(date); 
System.out.println("Local in String format " + strDate); 
2

喬達時間

在做任何與日期時間工作顯著,你應該避免java.util.Date和java.util.Calendar中的類,因爲它們是出了名的麻煩,混亂,和有缺陷。而是使用可在Android中工作的Joda-Time庫。

ISO 8601

您的字符串輸入接近標準ISO 8601格式。只需將空間替換爲T即可。然後將結果連同代表該字符串的預期時區的DateTimeZone對象一起傳遞給DateTime的構造函數。爲數百個示例搜索StackOveflow。

UTC

由於埃利奧特·弗裏施評論,在服務器端,你應該是工作和存儲都在UTC日期時間值。僅當用戶在用戶界面中預期時才轉換爲本地分區值。

服務器本身應設置爲UTC,否則設置爲雷克雅未克冰島。但是你的編程不應該假定服務器是如此設置的。您的編程應始終指定所需的時區。

搜索StackOverflow以獲得數百個示例和討論這些要點。

+0

謝謝你的洞察力。 – Aniruddha 2014-10-29 08:52:46