Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 当url具有GWT.codesvr时,GWT的行为不同_Date_Gwt - Fatal编程技术网

Date 当url具有GWT.codesvr时,GWT的行为不同

Date 当url具有GWT.codesvr时,GWT的行为不同,date,gwt,Date,Gwt,我使用eclipse创建了一个简单的GWT示例,我只向GreetingService添加了一个自动生成的方法 Date greetServer2() ; 它的实现如下所示: public Date greetServer2(){ // TODO Auto-generated method stub // String s = "2014/04/08"; DateFormat inputFormatter = new SimpleDateFormat("y

我使用eclipse创建了一个简单的GWT示例,我只向GreetingService添加了一个自动生成的方法

Date greetServer2() ;
它的实现如下所示:

    public Date greetServer2(){
    // TODO Auto-generated method stub
    //
    String s = "2014/04/08";
    DateFormat inputFormatter = new SimpleDateFormat("yyyy/MM/dd");
    Date date=null;
    try {
        date = inputFormatter.parse(s);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    return date;
}
在客户端,我只是在弹出窗口中显示日期:

            greetingService.greetServer2(new AsyncCallback<Date>() {
                public void onFailure(Throwable caught) {
                    // Show the RPC error message to the user
                    ...
                }

                public void onSuccess(Date result) {
                    Window.alert(result.toString());
                }
            });
弹出窗口显示“2014年4月8日星期二00:00:00 CLST”

但如果我在没有gwt.codesvr参数的情况下访问:

http://127.0.0.1:8888/HelloGWT.html
弹出窗口显示“2014年4月7日星期一23:00:00 GMT-400”

我的GWT是2.5.1,我的JDK是1.7.0_25

有什么线索吗


提前感谢。

一个结果来自Java代码,另一个结果由浏览器生成。不同之处在于时区。如果希望结果一致,则不应使用date.toString(),而应使用
日期格式显示日期,并向其传递时区

请记住,您的用户可能处于不同的时区,并且他们都将根据浏览器设置看到不同的“时间”(甚至是不同的日期,如您的示例中所示),除非您在代码中指定时区

更新:

处理时区有不同的策略。例如,您可以将所有日期保存为长值(
date.getTime()
),以保持一致性。然后,使用日期格式和时区显示它

如果您想确保您的日期恰好在选定时区的午夜开始,请在保存或使用它之前进行调整。我就是这样做的:

public static Long toMidnight(Long date, TimeZone timeZone) {
    return date - date % (24 * 60 * 60 * 1000) +
            timeZone.getOffset(new Date(date)) * 60 * 1000;
}

嗨,客户端(浏览器)和服务器都在同一台笔记本电脑上。我使用的时区是(UTC-04:00圣地亚哥)。实际上,我之所以写这个例子是因为我确实遇到了一些时区问题,我尝试调试它,但是gwt应用程序在正常运行和调试模式下的行为不同,这会导致很多混乱。然后使用DateFormat并传递时区。使用
date.toString()
不会帮助您发现问题-您有相同的日期,只是Java和JavaScript显示不同。感谢您的回复,我使用它来格式化日期:ateTimeFormat f=DateTimeFormat.getFormat(“yyyy.MM.dd G HH:MM:ss vvv”);TimeZoneConstants t=(TimeZoneConstants)GWT.create(TimeZoneConstants.class);TimeZone tz=TimeZone.createTimeZone(t.americaSantiago());窗口警报(f.format(result,tz));现在两种情况都返回相同的日期字符串,但它是2014-04-07 23:00:00,如果我需要它是2014-04-08 00:00:00,我该怎么办?
一个结果来自一个试图模拟JavaScript行为的插件
:实际上,不是。在DevMode中,Java代码在Java中运行,因此您直接使用
Java.util.date#toString()
。在prod模式下,您可以从GWT运行模拟版本。请参阅(顺便说一句,这有点过时)
public static Long toMidnight(Long date, TimeZone timeZone) {
    return date - date % (24 * 60 * 60 * 1000) +
            timeZone.getOffset(new Date(date)) * 60 * 1000;
}