2012-04-16 91 views
1

我有一個android應用程序的時區的問題。安卓日曆時區不工作?

下面的代碼

是我的例子:

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("America/Miami")); 
    c2 = Calendar.getInstance(TimeZone.getDefault()); 
    c2.set(2012, Calendar.MAY, 1, 9, 0, 0); 

    tv2.setText(c1.getTime().toString()); 
    tv3.setText(c2.getTime().toString()); 

當我啓動應用程序,並期待在textViews我發現: enter image description here

爲什麼他們都GMT + 2和第一不邁阿密時區?

+1

AFAIK,只有當您的設備具有特定時區時,您的時區才能使用。你爲什麼不嘗試使用String [] getAvailableIDs()來檢查你是否有特定的時區。你也可以嘗試使用TimeZone.getTimeZone(「GMT + 14:00」),你提供的時區使用的是GMT – Shubhayu 2012-04-16 07:44:54

+0

好吧,沒有邁阿密,所以我改爲「New_York」,但它仍然不工作。 – gurehbgui 2012-04-16 07:51:14

+0

當我將其更改爲TimeZone.getTimeZone(「GMT-05:00」)時,它不起作用 – gurehbgui 2012-04-16 07:54:19

回答

6

我可以複製您遇到的問題。您可以通過以下操作獲得在邁阿密時區的正確時間:

Calendar c1 = new GregorianCalendar(TimeZone.getTimeZone("GMT-4")); 
int hour = c1.get(Calendar.HOUR);   
int minutes = c1.get(Calendar.MINUTE);  
int seconds = c1.get(Calendar.SECOND); 

tv2.setText(String.format("%d:%d:%d", hour, minutes, seconds)); 

輸出:4點22分41秒

您可以使用「美國/紐約」或「GMT-4」。然而,Chilledrat提到的最後一個可能會遇到一些夏令時問題。

+0

這種方法在夏令時更改時是否存在問題? – Chilledrat 2012-04-16 11:00:19

+0

是的,我認爲你是對的。你可以使用「America/New_York」,這應該和邁阿密相同的時區。 Calendar c1 = new GregorianCalendar(TimeZone.getTimeZone(「America/New_York」)); – Priebe 2012-04-16 11:42:51

5

好吧,經過大量的試驗,終於搞清楚了。我觀察到的問題是,Calendar的getTime()似乎總是返回當前TimeZone中的日期。我仍然沒有發現任何說明這種方式的數據。

要以您想要的方式獲取數據,我們需要引入SimpleDataFormat。這是我所做的獲取數據。

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US); 
Calendar c2 = Calendar.getInstance(TimeZone.getDefault()); 
c2.set(2012, Calendar.MAY, 1, 9, 0, 0); 

SimpleDateFormat sdf = new SimpleDateFormat(); 
sdf.setCalendar(c1); 
tv2.setText(sdf.format(c1.getTime())); 
tv3.setText(c2.getTime().toString()); 

在這裏,您可以根據定義的時區獲得輸出。

注意我也使用了Locale,因爲它應該是推薦的做法。告訴我這是否適合你。