将Java日期转换为字符串到JsDate?
我有一个Java/Groovy日期,它被转换成字符串将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();
Date myDate = new Date();
dateForClient = myDate.toString();
dateForClient通过JSON发送到客户端。因此,客户机将收到一个JSONString ob dateForClient
我可以通过以下方式接收字符串:
String dateOnClient = jsonMessage.get("dateForClient").isString().stringValue();
您可以使用以毫秒为单位的日期来实例化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的原因,请参阅)。为了安全起见,最好将其作为一根绳子运输。