2012-03-18 34 views

回答

1

用於設置時區編程上你需要使用日期類。 查看其參考文件here

您需要使用setTimeZone()方法SimpleDateFormat類。

以下爲設置時區代碼示例根據美國

// First Create Object of Calendar Class 
Calendar calendar = Calendar.getInstance();   
// Now Set the Date using DateFormat Class 
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss z"); 
// Finally Set the time zone using SimpleDateFormat Class's setTimeZone() Method 
sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 
+0

在您看來,如果應用程序沒有SET_TIME_ZONE權限,代碼應該工作嗎? – Jake 2012-03-18 03:14:30

+1

@Jake:它必須「有效」。它所做的就是爲你的對象設置'TimeZone'。這就像說'int a = 43',沒有什麼OS關心。全局設置是您需要的權限,請參閱其他答案。 – maaartinus 2012-09-17 21:27:59

+1

此答案顯示如何在SimpleDateFormat實例上設置時區,而不是系統。見Dheeraj的回答。 – spaaarky21 2013-11-22 23:13:36

14

如果你的目標是改變系統的默認時區,然後用AlarmManager的setTimeZone()

+0

謝謝!這工作。 – herbertD 2012-08-13 05:32:01

3

您可以設置時區以多種方式:

  1. 您可以使用TimeZone.setDefault()這將更改時區,只對當前進程。但正如文檔中指出的那樣,這並不能保證持續整個應用程序生命週期。

  2. 您可以使用setTimeZone()AlarmManager更改整個設備的時區。但你需要「SET_TIME_ZONE」 - 許可。

如果你覺得1是危險的,你不必爲2.將您的最好的辦法權限是從Calendar讓每一個日期,並通過setTimeZone()設置日曆上的實例時區。

+0

這是一個恥辱,第一個解決方案不能保證100%的工作。你有更多的信息,在這種情況下'TimeZone.setDefault()'失效或覆蓋?該文檔僅指出「此值可能隨時被清除或覆蓋」,但文檔沒有更詳細地說明何時會發生以及爲什麼。 – 2015-12-09 08:39:49

+0

@StefanArn對不起,我沒有任何信息。但如果設備配置爲通過網絡或類似來源(即GPS)設置日期和時區,我懷疑它可能會被系統修改。 – AlexS 2015-12-09 10:28:39

相關問題