2012-03-18 79 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

相关问题