【问题标题】:Format date time in gwt with timezone使用时区在 gwt 中格式化日期时间
【发布时间】:2016-05-19 22:31:09
【问题描述】:

我需要格式化一个日期并根据用户位置显示给用户。

我正在尝试使用以下代码格式化时间

DateTimeFormat.getFormat("h:mm a z").format(new Date(timeInMillis))

这是纽约用户得到“5:18 PM UTC-4”和西雅图用户得到“2:18 PM UTC-7”的结果。如何为纽约用户生成像“5:18 PM EST”和“2:18 PM PDT”这样的字符串?

注意:使用 format(new Date(time), timezone) 的问题在于如何根据用户区域设置创建时区对象? Timezone.createTimeZone(int) 提供 SimpleTimeZone 实现,它将产生“UTC-4”,为了生成“PDT”,必须使用 Timezone.createTimeZone(timezoneJson: string) 创建时区,但问题是我们必须在编译时选择时区以创建输入时区 json 字符串。

提前致谢

【问题讨论】:

    标签: gwt timezone


    【解决方案1】:

    您需要将TimeZone object 传递给格式化程序:

    format.format(new Date(), timeZone));
    

    请注意,创建 TimeZone 的最佳方法是使用包含过去时区更改信息的 JSON 字符串。如果您的应用不处理过去的时间,那么这可能没有必要。

    【讨论】:

    • 请记住,GWT 内置了所有最新的时区数据 - 您可以 GWT.create com.google.gwt.i18n.client.constants.TimeZoneConstants 的实例并按名称获取它们,或者只是选择出你想要的特定的。警告 - 包括所有可能的时区会极大地膨胀您的应用程序,这就是为什么 Java 自己的 TimeZone 没有在核心 GWT 中模拟的原因。
    • 但问题是如何为不同时区的用户创建 timeZone 对象?
    • 询问他们想要哪个时区并相应地创建时区对象。通常它是在您的应用程序的设置或首选项中完成的。您还可以设置默认时区 - 大多数用户所在的时区,这样这些用户就不必更改他们的设置。最后,您可以简单地在您的默认时区显示时间,确保您知道它是哪个时区,并让用户自己弄清楚。这就是许多网站所做的,比如 ESPN。他们说游戏从美国东部时间晚上 8 点开始,用户知道这对他们自己的时区意味着什么。
    • 浏览器已经知道用户区域,并且可以在一定程度上处理它,这就是为什么我根据位置看到“5:18 PM UTC-4”或“2:18 PM UTC-7”但是我想要的是“美国东部标准时间下午 5:18” 看看区别,我不想要“UTC-4”,我想要“EST”或“PDT”或任何相关的
    • 使用预定义格式之一,而不是.getFormat("h:mm a z")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多