当前位置: 首页 > 面试题库 >

如何从语言环境获取当前的时间和时区?

何兴邦
2023-03-14
问题内容

我有一个奇怪的问题,当我创建一个具有区域设置的日历时,TimeZone只是还原为本地日历

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 Date Object的getTimezoneOffset()函数从客户端读取 当前 时区偏移,然后以某种方式(AJAX)将其发送到服务器。此方法的问题在于,存在多个具有该偏移量的时区,并且所选时区可能不适用于其他日期。当然,您可以通过轮询时间更改日期附近的数据来猜测时区,但这可能不是您想要的。
  3. 您可以将未格式化的时间发送给客户端(例如,以ISO 8601日期-时间格式或相对于UTC 的纪元的Unix时间编写),并为您提供Globalize或Dojo格式的日期和时间。

在这三个可能的选择中,我始终选择数字1。通过将时区信息添加到用户个人资料中,您可以确定他/她的首选时区是什么,而不管其当前的Web浏览器是什么,等等。请记住一些用户可能想在访问其他国家时使用您的应用程序…



 类似资料:
  • 问题内容: 我正在从Web服务下载一些JSON数据。在此JSON中,我有一些日期/时间值。UTC中的所有内容。如何解析此日期字符串,使结果Date对象位于当前语言环境中? 例如:服务器返回“ 2011-05-18 16:35:01”,并且我的设备现在应显示“ 2011-05-18 18:35:01”(格林尼治标准时间+2) 我当前的代码: 问题答案: 它具有一个设置的时区方法: 全做完了!

  • 问题内容: 如何使用Java获取当前日期和时间? 我正在寻找与C#等效的东西。 问题答案: 只需构造一个没有任何参数的新对象即可;这会将当前日期和时间分配给新对象。 在的话的Javadoc的无参数的构造函数: 分配一个Date对象并对其进行 初始化,以便它表示分配它的时间( 以最近的毫秒为单位)。 确保您使用的不是-后者没有零参数构造函数,并且语义有所不同,这是完全不同的对话的主题。:)

  • 问题内容: 我是Java和Android开发的新手,所以这可能是一个愚蠢的问题,但是我已经搜寻了好几天,却找不到解决方案: 我尝试根据用户的语言环境输出a 。 在StackOverflow上搜索使我想到了这一点: 输出: 在我的法语本地电话上。差不多了 我如何也输出 小时,分钟和秒部分 的,使用用户的语言环境?我一直在寻找android文档,但找不到任何东西。 非常感谢。 问题答案: 用 参考:h

  • 问题内容: 我遇到了一个非常奇怪的问题,听起来像是系统错误。我只想使用小时和分钟信息来格式化日期,并在必要时显示AM / PM。 这是我的代码: 如您所见,我正在使用而不使用,并且如Apple文档所述,如果用户选择12h格式,它应该自动添加AM / PM: 时间的表示可能是13:00。但是,在iOS中,如果用户将24小时制切换为关闭,则时间可能是1:00 pm。 我发现它可以在我的设备(我位于欧洲

  • 问题内容: 我有一些用Go编写的代码,我正在尝试更新这些代码以使用最新的每周构建。(它最后一次在r60下构建)。现在,一切正常,除了以下几位: 关于如何更新它以与当前Go实施一起使用的任何建议? 问题答案: