在Android中以编程方式更改时区

14

我希望在Android中以编程方式更改时区,例如将时区设置为“America/Los_Angeles”。我该如何做到这一点?如何使用ID实现此目标。

5个回答

21

在您的 AndroidManifest.xml 文件中

<uses-permission android:name="android.permission.SET_TIME_ZONE"/>

在你的源代码中:

AlarmManager am = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
am.setTimeZone("America/Los_Angeles");

1
我想在本地更改三个不同时区的时区。
  1. EST(东部标准时间)。
  2. CST(中部标准时间)。
  3. AST(大西洋标准时间)。
我从哪里可以选择相应时区的键?
- Nithinjith
调用 TimeZone.getAvailableIDs() 来获取您系统中已知的时区列表。 - Synesso
8
此权限仅限于系统应用程序。 - HHLV
3
在Android API 26和27中收到此错误:setTimeZone:用户10087和当前进程都没有android.permission.SET_TIME_ZONE权限。 - Omid Ziyaee
将AndroidManifest.xml中的代码更改为:<uses-permission android:name="android.permission.SET_TIME_ZONE" android:protectionLevel="signatureOrSystem"></uses-permission> - Ferdiyan Syah
1
我也遇到了@OmidZiyaee相同的错误。你找到解决方案了吗? - Alessandro Caliaro

7

Abhishek的代码只是定义了一个特定格式的日历实例,用于应用程序中的使用,所以这不起作用。

无法通过编程方式更改手机的时区。 然而,您可以将用户重定向到适当的设置:

startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));

根据Synesso和HHLV提供的信息,可以设置时区。需要设置权限,并且必须是系统应用程序。我不知道如何将其设置为系统应用程序。对于普通的(Play商店)应用程序可能不可行。但是,在某些情况下(例如嵌入式),我认为是可能的。 - steve

5

如果您在模拟器或已经获取了root权限的设备上,可以运行以下命令:

adb shell "su -c 'setprop persist.sys.timezone America/Los_Angeles; stop; sleep 5; start'"

正是我所需要的。谢谢。 - David Refoua

4
Calendar calendar = Calendar.getInstance();       
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println(sdf.format(calendar.getTime()));

Source


3
这个来源是回答另一个问题的答案,对于这种情况并不足够。 - MarchingHome
1
谢谢。这个答案真的帮了我大忙,因为我只在日历实例上设置了时区,而没有在 SimpleDateFormat 上设置,所以我无法得到我想要的偏移时间。例如,我的时区是+8,但我想让我的应用程序显示来自-7时区的时间,这就是我想要的。请在代码中进行更改。已投赞成票。 - elliotching

-1

你应该拥有设置时区的系统签名。如果你不是设备的制造商,也许可以联系他们并询问keystore文件。之后,你就可以使用keystore文件将应用程序签名为系统应用。


1
您的回答需要更多的支持性信息才能得到改善。请编辑以添加进一步的细节,例如引用或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community
这并没有回答问题。一旦您获得了足够的声望,您将能够评论任何帖子;相反,请提供不需要询问者澄清的答案。- 来自审核 - mochadwi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接