为安卓应用设置默认时区

3

我正在开发一款Android应用程序,需要列出活动及其日期和时间。我希望忽略设备的时区,始终以+02:00时区显示时间。

该应用程序面向西班牙,但如果身处另一个时区的英国用户使用该应用程序,则希望活动的时间以当地西班牙时间显示。

日期使用UTC格式,使用Calendar.getTime().toLocaleString()方法,在设备的本地时区中显示时间。

我想知道是否有一种方法可以设置应用程序使用的默认时区,并在调用Calendar.getTime().toLocaleString()方法时始终获取+2本地时区的时间,而不考虑设备时区。

2个回答

9
TimeZone.setDefault(TimeZone.getTimeZone("GMT+3"));

这将设置默认时区。后续调用 Calendar.getInstance() 的返回值始终会像设备处于该时区一样。


0
您需要设置日历的时区。 可以像这样操作:
Calendar.setTimeZone(TimeZone timezone);

然后你的日历将与不同的时区配合工作。

如果您想更改系统时区,可以使用AlarmManager的setTimeZone()进行操作。

在这样做时,清单必须包含正确的权限,即

android.permission.SET_TIME

链接到文档

我还发现了另外一种解决方案在这里,看看吧。


1
抱歉,我没有解释清楚,我想要的是一种为我的应用程序设置默认时区的方法。当我调用Calendar.getTime().toLocaleString()时,我希望始终获取+2时区的时间,而不管设备的本地时区如何。我希望避免每次在用户屏幕上打印时间时都要设置calendar.setTimeZone。 - Marc Cals
但如果我没有错的话,每次我需要显示时间时,我必须设置Calendar.setTimeZone(TimeZone timezone)。然后,我不喜欢更改系统时区的选项,因为这会更改设备时间,每当我的应用程序失去焦点时,我都必须恢复系统时区。我正在寻找一种仅为我的应用程序设置默认时区的方法,并且我希望避免每次我需要显示时间时调用Calendar.setTimeZone(Timezone)。谢谢 - Marc Cals
试一下,然后你就会知道你是否错了。但是编辑一个指向另一个解决方案的链接。 - eric.itzhak
谢谢您提供的解决方案。我已经尝试了,但我必须每次要显示时间时都设置时区。我正在寻找的是一种方法,只需执行类似于MyApplicationSetting.setTimeZone("Madrid")这样的操作来设置一次时区,然后使用SimpleDataFormat.Format(MyDate)格式化,即使设备位于其他时区,时间也会以西班牙的时区显示。 - Marc Cals
@MarcCals你有找到问题的答案吗?我目前也正在寻找这种设置时区的实现方式。 - frey
嗨@Hilfritz!不,我没有找到任何答案。 - Marc Cals

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