【发布时间】:2012-04-03 01:54:55
【问题描述】:
Android 提供名为“SET_TIME_ZONE”的权限,操作系统权限级别为“危险”。有谁知道给一个应用程序有这个权限,应用程序如何设置时区?
谢谢。
【问题讨论】:
Android 提供名为“SET_TIME_ZONE”的权限,操作系统权限级别为“危险”。有谁知道给一个应用程序有这个权限,应用程序如何设置时区?
谢谢。
【问题讨论】:
您可以通过多种方式设置时区:
您可以使用TimeZone.setDefault(),它只会更改当前进程的时区。但正如文档中所述,这并不能保证在整个应用程序生命周期中持续。
您可以使用setTimeZone() 的AlarmManager 更改整个设备的时区。但是您需要“SET_TIME_ZONE”权限。
如果您认为 1. 很危险,并且您没有 2. 的权限,您最好的方法是从 Calendar 获取每个日期,并通过 setTimeZone() 在日历实例上设置 TimeZone。
【讨论】:
TimeZone.setDefault() 被无效或覆盖?文档仅说明“此值可能随时被清除或覆盖”,但文档并未详细说明何时会发生这种情况以及原因。
如果您的目标是更改系统的默认时区,请使用 AlarmManager 的setTimeZone()。
【讨论】:
要以编程方式设置时区,您需要使用日期类。 请参阅其参考文档here。
你需要使用SimpleDateFormat类的setTimeZone()方法。
以下是根据美国设置时区的示例代码
// 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"));
【讨论】:
TimeZone。这就像说int a=43,操作系统不关心什么。全局设置是您需要权限的内容,请参阅其他答案。