【问题标题】:Android how to set time zone through applicationAndroid如何通过应用程序设置时区
【发布时间】:2012-04-03 01:54:55
【问题描述】:

Android 提供名为“SET_TIME_ZONE”的权限,操作系统权限级别为“危险”。有谁知道给一个应用程序有这个权限,应用程序如何设置时区?

谢谢。

【问题讨论】:

    标签: android timezone


    【解决方案1】:

    您可以通过多种方式设置时区:

    1. 您可以使用TimeZone.setDefault(),它只会更改当前进程的时区。但正如文档中所述,这并不能保证在整个应用程序生命周期中持续。

    2. 您可以使用setTimeZone()AlarmManager 更改整个设备的时区。但是您需要“SET_TIME_ZONE”权限。

    如果您认为 1. 很危险,并且您没有 2. 的权限,您最好的方法是从 Calendar 获取每个日期,并通过 setTimeZone() 在日历实例上设置 TimeZone。

    【讨论】:

    • 很遗憾第一个解决方案不能保证 100% 有效。您是否有更多信息在哪些情况下TimeZone.setDefault() 被无效或覆盖?文档仅说明“此值可能随时被清除或覆盖”,但文档并未详细说明何时会发生这种情况以及原因。
    • @StefanArn 抱歉,我没有任何信息。但我怀疑它可能会被系统修改,如果设备配置为通过网络或类似来源(即 GPS)设置日期和时区。
    【解决方案2】:

    如果您的目标是更改系统的默认时区,请使用 AlarmManager 的setTimeZone()

    【讨论】:

      【解决方案3】:

      要以编程方式设置时区,您需要使用日期类。 请参阅其参考文档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")); 
      

      【讨论】:

      • 在您看来,如果应用程序没有 SET_TIME_ZONE 权限,代码是否应该工作?
      • @Jake:它必须“工作”。它所做的只是为您的对象设置TimeZone。这就像说int a=43,操作系统不关心什么。全局设置是您需要权限的内容,请参阅其他答案。
      • 这个答案显示了如何在 SimpleDateFormat 实例上设置时区,而不是系统。请参阅 Dheeraj 的回答。
      • -1 因为这个答案实际上不是问题的答案,因为无法通过 Date-class 设置 TimeZone。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多