gpt4 book ai didi

java - 如何从 Locale 获取当前时间和时区?

转载 作者:行者123 更新时间:2023-12-01 19:09:09 26 4
gpt4 key购买 nike

我有一个奇怪的问题,当我创建带有区域设置的日历时,时区只是恢复为本地的

public void start(Locale locale){
String s = locale.getDisplayName();
System.err.println(s);
Calendar c = new GregorianCalendar(locale);
System.err.println(c.getTimeZone());
}

这是输出:

 español (Argentina)
sun.util.calendar.ZoneInfo[id="Europe/Bucharest", //etc more useless date here....

如何从特定区域获取正确的时间?

最佳答案

简短的回答:你不能。

长答案:不存在“区域设置的正确时区”之类的东西。那只是因为有一些国家/地区拥有多个时区(例如美国)。时区是一个不同的概念。

无论如何,您正在寻求解决您的问题。我猜您正在编写一个 Web 应用程序,并且您看到时区正在恢复为服务器默认值。这是一个典型的情况。 Locale.getDefault()TimeZone.getDefault() 都会返回服务器相关信息。 JVM 无法知道“正确的”时区。那么你能做些什么呢?

  1. 您可以将时区信息添加到用户配置文件(如果有),或创建时区组合框(以便用户可以在运行时切换)。然后您可以为 DateFormat 实例分配适当的对象,它会自动转换时区。
  2. 您可以通过 JavaScript 日期对象的 getTimezoneOffset() 从客户端读取当前时区偏移量函数并以某种方式(AJAX)将其发送到服务器。此方法的问题在于,有多个时区具有该偏移量,并且所选时区可能不适合其他日期。当然,您可以通过轮询时间更改日期周围的数据来猜测时区,但这可能不是您想要做的。
  3. 您可以将未格式化的时间发送给客户端(例如写为 ISO 8601 date-time format 或相对于 UTC 的 Unix time of the epoch)并获得 GlobalizeDojo为您设置日期和时间的格式。

在这三个可能的选择中,我总是选择第 1 个。通过将时区信息添加到用户个人资料中,您可以确定他/她的首选时区是什么,无论他们当前的网络浏览器是什么,等等。请保留请记住,某些用户可能希望在访问其他国家/地区时使用您的应用程序...

关于java - 如何从 Locale 获取当前时间和时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com