首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SmartGWT时区

SmartGWT时区
EN

Stack Overflow用户
提问于 2013-08-20 15:39:49
回答 2查看 2.5K关注 0票数 3

我试图弄清楚如何使用SmartGWT的TimeItem、Calendar和DateItem。由于所有这些组件都将它们的数据转换为客户端的时区,所以我陷入了困境。为了论证起见,让我们以TimeItem为例。

我有一个DynamicForm,它的内部有一个TimeItem,如果将值设置为(Java.Util.Date)12:00,则dynamicform显示19:30。如果您通过TimeItem.getValue获得该值,它将返回(com.smartgwt.client.util.LogicalTime)13:30。下面是代码示例

代码语言:javascript
复制
    DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HHmmss");

    layout = new VLayout();
    form = new DynamicForm();
    item = new TimeItem("TIME","TIME");
    form.setItems(item);
    layout.addMember(form);
    Button btn = new Button("put");
    btn.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            Date parse = timeFormatter.parse("120000");
            System.out.println(parse.toString());// prints out Tue Aug 20 12:00:00 VET 2013
            form.getField("TIME").setValue(parse); // sets 19:30 seen by the user
            //form.getField("TIME").setValue("120000");
        }
    });

    Button btn2 = new Button("get");
    btn2.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            Object value = form.getField("TIME").getValue();
            System.out.println(value.toString());// prints out Thu Jan 01 13:30:00 VET 1970
            //However if the value is set using a simple string,
            //(like so "form.getField("TIME").setValue("120000");")
            //this line
            //prints out Thu Jan 01 06:00:00 VET 1970
        }
    });

    layout.addMember(btn);
    layout.addMember(btn2);

    layout.draw();

我的计算机时区设置为:(UTC+02:00)伊斯坦布尔,如果这样可以清除任何东西的话

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-31 08:01:33

这真的很有趣,我的一个朋友告诉我,这是因为Windows上的一些令人讨厌的行为。我不知道为什么,也不知道怎么做,但解决方案如下。如果我的时区设置为+2伊斯坦布尔,上面的bug可以被复制,但是如果我将我的机器上的时区设置更改为雅典+2,那么bug就消失了。我所做的就是改变我的设置,使我的时区设置为雅典+2。希望这对将来的任何人都有帮助。

票数 2
EN

Stack Overflow用户

发布于 2013-08-25 23:50:03

你是否使用了以下方法(可能是解决其他问题的方法)?

代码语言:javascript
复制
DateUtil.setDefaultDisplayTimezone("00:00");

默认情况下,SmartGWT使用浏览器时区呈现日期/时间值。

setDefaultDisplayTimezone()用于全局设置UTC偏移量,该偏移量在日期/时间格式化期间使用。

但是,DateTimeFormat是一个GWT类,不受setDefaultDisplayTimezone() (即SmartGWT )的影响。

默认情况下,GWT使用客户端的本地时区

根据代码注释,VET是“委内瑞拉标准时间”,即"UTC-04:30小时“。

当不指定时区而解析"120000“时,GWT将其解析为”12:00:00UTC-04:30“。

这将由SmartGWT按照setDefaultDisplayTimezone()值转换回setDefaultDisplayTimezone(),从而显示"19:30:00 UTC+00:00“。

不使用setDefaultDisplayTimezone()或使用setDefaultDisplayTimezone("-04:30");

代码语言:javascript
复制
System.out.println(parse.toString());  // => 12:00:00 VET
form.getField("TIME").setValue(parse); // => 12:00

当使用DateUtil.setDefaultDisplayTimezone("00:00");

代码语言:javascript
复制
System.out.println(parse.toString());  // => 12:00:00 VET
form.getField("TIME").setValue(parse); // => 19:30

如果在UTC+00:00中必须将默认时区设置为SmartGWT,则可以使用类似于以下内容的内容

代码语言:javascript
复制
Date parse = DateTimeFormat.getFormat("HHmmss Z").parse("120000 +00:00");

System.out.println(parse.toString());  // => 19:30:00 VET
form.getField("TIME").setValue(parse); // => 12:00

不过,要注意DST的变化等等。

另外,根据SmartClient支持的说法

代码语言:javascript
复制
Stored datetime values are milliseconds since epoch.
They do not *have a* timezone, they are *rendered in* a timezone.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18339321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档