Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
将Java日期转换为字符串到JsDate?_Java_Json_Gwt - Fatal编程技术网

将Java日期转换为字符串到JsDate?

将Java日期转换为字符串到JsDate?,java,json,gwt,Java,Json,Gwt,我有一个Java/Groovy日期,它被转换成字符串 Date myDate = new Date(); dateForClient = myDate.toString(); dateForClient通过JSON发送到客户端。因此,客户机将收到一个JSONString ob dateForClient 我可以通过以下方式接收字符串: String dateOnClient = jsonMessage.get("dateForClient").isString().stringValue();

我有一个Java/Groovy日期,它被转换成字符串

Date myDate = new Date();
dateForClient = myDate.toString();
dateForClient通过JSON发送到客户端。因此,客户机将收到一个JSONString ob dateForClient

我可以通过以下方式接收字符串:

String dateOnClient = jsonMessage.get("dateForClient").isString().stringValue();
  • 如何将此dateOnClient转换为com.google.gwt.core.client.JsDate

  • 在通过JSON发送日期之前,是否必须在服务器端调用toString()方法?结果是,如果我省略了服务器端的toString(),则接收到的日期不正确


  • 您可以使用以毫秒为单位的日期来实例化JsDate。JsDate和java.util.Date都可以使用花费毫秒的构造函数进行实例化

    JsDate jsDate = new JsDate(myDate.getTime());
    
    日历日期 如果您的日期应表示日历日期(例如,新年在1月1日00:00:00,与时区无关),则最好将日期作为格式化字符串发送。因此,在服务器端,您可以执行以下操作:

    //不带(!)时区的ISO 8601格式
    DateFormat DATE_FORMAT=新的简化格式(“yyyy-MM-dd'HH:MM:ss.SSS”);
    日期myDate=新日期(…);//要避免这里的时区问题,请选择
    //将服务器上的日历日期存储为
    //字符串(或使用Joda时间片段)
    字符串dateForClient=DATE\u FORMAT.FORMAT(myDate);
    
    在客户端,理论上你可以使用

    JsDate JsDate=JsDate.parse(dateOnClient);//不理想
    
    但是,JavaScript日期解析有点不可靠,请参见

    因此,最好让GWT帮助您:

    DateTimeFormat dtf=DateTimeFormat.getFormat(预定义格式.ISO_8601);
    Date-Date=dtf.parseStrict(dateOnClient);
    JsDate JsDate=JsDate.create(date.getTime());
    
    实际日期 但是,如果您的日期应代表一个实际时间点(例如,飞机于UTC 8月21日10:00:00起飞),则您可以

    a) 执行与上面相同的操作,但修改服务器端的日期格式以包含时区:
    newsimpledateformat(“yyyy-MM-dd'HH:MM:ss.SSSZ”)

    b) 但通过JSON发送毫秒值可能要简单得多。所以在服务器端,您可以这样做

    datemydate=新日期();
    字符串dateForClient=”“+myDate.getTime();
    
    (注意,我们仍然使用字符串来传输值,因为JavaScript的数字范围不足以传输所有可能的
    long
    值。)

    在客户端,你会这样做

    JsDate JsDate=JsDate.create(new Long(dateOnClient));
    
    更多背景
    不幸的是,Joda Time在GWT客户端仍然不能很好地使用,否则我建议在Joda Time的文档中阅读物理日期(“瞬间”)和日历日期(“部分”)之间的区别:

    但我在客户端有一个字符串日期表示。有没有办法将Java/Groovy日期转换为毫秒?可以使用
    SimpleDataFormat
    JodaTime
    Java.util.Date
    字符串中分离出来。或者最好以毫秒为单位发送日期信息<代码>dateForClient=myDate.getTime()那不是JsDate.create(myDate.getTime())?根据上面的代码,您必须执行
    JsDate.create(String.valueOf(jsonMessage.get(“dateForClient”).isString().stringValue())变量b:在服务器端,在执行encodeAsJSON()之前,我是否具有生成字符串dateForClient=(String)myDate.getTime()的权限以获得正确的传输?这取决于服务器端使用的JSON库。但是,库可能会尝试将长值转换为JavaScript数字——正如我前面所说,JavaScript中的数字范围可能不够大,因此会出现数字溢出——如果这个数字变大,就会得到不可预测的结果。(注意:这就是GWT内部非常特别地对待Long的原因,请参阅)。为了安全起见,最好将其作为一根绳子运输。