我试图弄清楚如何使用SmartGWT的TimeItem,Calendar和DateItem.由于所有这些组件都将其数据转换为客户端的时区,因此我感到很困惑.为了论证,让我们采用TimeItem.
如果您将值设置为(Java.Util.Date)12:00,则动态表单显示19:30,我有一个DynamicForm,其中包含TimeItem.如果通过TimeItem.getValue获得该值,它将返回(com.smartgwt.client.util.LogicalTime)13:30.代码示例如下
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)伊斯坦布尔,如果可以清除所有内容
预先感谢您的任何帮助.
最佳答案
我的一个朋友告诉我,这真的很有趣,这是由于Windows上的某些令人讨厌的行为.我不知道为什么或如何,但是解决方案如下.如果我的时区设置为2 Istanbul,则可以重现上述错误,但是如果我将机器上的时区设置更改为Athens 2,该错误就会消失,所以…我所做的就是更改设置,以设置我的时区前往雅典2.希望这对以后的任何人有帮助.