Java 如何在android应用程序中全局固定时区?

Java 如何在android应用程序中全局固定时区?,java,android,kotlin,timezone,Java,Android,Kotlin,Timezone,我正在寻找一种最简单、最干净的方法来修复Android应用程序中所有日期的时区。这样做的目的是让应用程序像用户在另一个时区一样运行。让我澄清一下我在寻找什么: 假设用户的手机设置为America/New_York,那么我希望我的应用程序显示欧洲/阿姆斯特丹时区中的所有日期(以UTC为单位),而不管手机本身设置的时区。如果我与一个新日期()进行比较,如果这个新日期()也在欧洲/阿姆斯特丹时区的当前时间,那就太好了 在互联网上搜索解决方案后,我开始觉得我必须更新我应用程序中使用日期的每个地方,并强制

我正在寻找一种最简单、最干净的方法来修复Android应用程序中所有日期的时区。这样做的目的是让应用程序像用户在另一个时区一样运行。让我澄清一下我在寻找什么:

假设用户的手机设置为America/New_York,那么我希望我的应用程序显示欧洲/阿姆斯特丹时区中的所有日期(以UTC为单位),而不管手机本身设置的时区。如果我与一个新日期()进行比较,如果这个新日期()也在欧洲/阿姆斯特丹时区的当前时间,那就太好了

在互联网上搜索解决方案后,我开始觉得我必须更新我应用程序中使用日期的每个地方,并强制使用目标时区,就像这篇文章的解决方案:


有人知道如何以更简单、更干净的方式完成此任务吗?

我会尝试
TimeZone.setDefault(TimeZone)
如:

TimeZone.setDefault(TimeZone.getTimeZone(“欧洲/阿姆斯特丹”)

(建议检查返回的时区,
getTimeZone
不会对未知时区引发异常-或者使用
ZoneId
而不是
字符串

请参阅(这也提到了
user.timezone
system属性)


但是我不是一个android程序员/用户

对于任何使用java.time(现代java日期和时间API)的人来说,我都不是答案

time不包括用于设置JVM默认时区的选项。这样做是明智的。这不是你应该做的事。这样做会影响到在同一JVM中运行的每个程序,而且程序的每个部分以及JVM中的其他程序可能会设置不同,从而破坏您的意图

避免需要 在您的时间操作中,必须明确您想要哪个时区,并且您将始终知道您在JVM设置之外得到了什么。例如:

    System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));
示例输出:

2021-05-09T00:36:25.171213+05:00[亚洲/杜尚别]

System.setProperty 如果您已经编写了大量依赖JVM默认时区的代码,那么设置它的技巧是:

    System.setProperty("user.timezone", "Australia/Tasmania");
    System.out.println(ZonedDateTime.now());
这是刚刚打印的:

2021-05-09T05:38:03.568350+10:00[澳大利亚/塔斯马尼亚]

但是,由于开头提到的原因,它不是很健壮

如果要验证正在传递的字符串,请使用:

    System.setProperty("user.timezone", ZoneId.of("Australia/Tasmania").getId());
免责声明
从你的问题看来,你已经在使用旧的、设计糟糕的、过时很久的
java.util.Date
类和朋友了。我仍然想为那些可以选择现代化的用户发布答案。(您也可以使用过时的API提供的两种思想中的每一种。)

使用Java 8中引入的现代时间类。(LocalDateTime、ZonedDateTime等)如果通过
new Date()
您的意思是
java.util.Date
,则该对象纯粹是UTC。它根本没有时区。此外,您应该使用
java.time.*
API,无论是通过还是更新的。如果我与新日期()进行比较,如果新日期()也在欧洲/阿姆斯特丹时区的当前时间,那就太好了。一个老式的日期永远不在任何特定的时区,所以这是不可能的。这也许能回答你的问题吗。我知道这不是关于安卓的。