【问题标题】:How do I get GWT DateTimeFormat to display using the server TimeZone, rather than the client's?如何让 GWT DateTimeFormat 使用服务器时区而不是客户端显示?
【发布时间】:2010-02-03 01:59:51
【问题描述】:

我正在尝试在客户端显示 (java.util.)Date,并且它一直使用浏览器的时区,从而根据您查看页面的位置显示不同的日期。

如何让格式化程序 (DateTimeFormat) 使用服务器的时区而不是用户显示日期?

谢谢

【问题讨论】:

    标签: gwt date timezone


    【解决方案1】:

    “最简单”的解决方案(不需要与服务器进行任何通信的解决方案)只是强制 DateTimeFormat 使用特定时区(您的服务器所在的时区),如下所示:

    String pseudoServerTime = DateTimeFormat.getFullTimeFormat().format(new Date(), TimeZone.createTimeZone(TimeZoneConstants.europeWarsaw());
    

    您可以在某处将时区字符串/对象硬编码为public static final,以便在您移动/更改服务器时轻松更改(GWT 编译器将内联它,因此不会降低性能)。

    【讨论】:

    • 感谢 Igro - 这是我的第一个猜测,尽管我刚刚硬编码了时区偏移量。我使用硬编码偏移量的问题是,我们目前在这里(澳大利亚悉尼)处于夏令时,当结束时,时间将再次结束。
    • 不要硬编码偏移量。对 TimeZone 对象进行硬编码,并将考虑夏令时。
    【解决方案2】:

    客户端会修改日期吗?如果没有在服务器上执行格式,只需发送一个字符串值。最后一件事。 GWT 中客户端的日期似乎存在一些问题。参考http://blog.gerardin.info/archives/674

    【讨论】:

    • 嗨 Carnell,日期不会在客户端修改,但它用于表格中进行排序,并且被格式化为“2010 年 1 月 31 日”,因此使其成为字符串服务器-side 会阻止排序工作。现在查看链接。谢谢
    • 您可以将日期作为字符串传递以进行显示,也可以传递日期的数值以用于排序。使用 Date.getTime() 获取日期的长值。唯一糟糕的是您必须将另一个字段传递给客户端,但它应该可以工作。
    • 你不能只从服务器传递字符串(使用java的SimpleDateFormat)并设置语言环境,例如:yyyy-MM-dd hh:mm Z,并在客户端使用这种格式,创建使用 GWT 的 DateTimeFormater 的日期。您将从服务器创建一个带有时区的日期,也可以将其用于其他目的。
    猜你喜欢
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多