我正在使用 GWT RPC 将包含日期的字符串从客户端发送到服务器(它必须是这种方式,因为它位于请求标头上)。
在服务器端,我使用 SimpleDateFormat 解析该字符串并制作我想要的逻辑。
我将我的手机和电脑设置为不同的时区,并将使用托管模式并在 tom cat 上运行测试项目。
这是代码:
客户:
DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss Z");
Date date = new Date();
System.out.println("client: " + date.toString());
System.out.println("client: " + dtf.format(date));
builder.setHeader("Date1", dtf.format(date));
服务器:
String dateHeader = request.getHeader("Date1");
System.out.println("Server date header from client: " + dateHeader);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
System.out.println("x = " + sdf.parse(dateHeader));
System.out.println("Timezone = " + df.getTimeZone().getDisplayName());
结果:
托管模式
客户端:2012 年 4 月 11 日星期三 17:29:49 NOVST
客户端:2012-04-11 17:29:49 +0700
来自客户端的服务器日期标头:2012-04-11 17:29:49 +0700
x = 4 月星期三2012 年 11 月 11 日 17:29:49
汤姆猫
- 使用PC:客户端和服务器有相同的时间。
(显然看不到客户端的打印)
来自客户端的服务器日期标头:2012-04-11 17:31:37 +0700
x = Wed Apr 11 17:31:37 NOVST NOVST 2012
- 手机客户端,有别于服务器。
来自客户端的服务器日期标头:2012-04-11 15:34:35 +0500
x = Wed Apr 11 17:34:35 NOVST 2012
结论: SimpleDateFormat 忽略字符串上的时区。我不想要那个!我希望它能够正常工作。我怎样才能使这项工作?提前谢谢你。