最近开发遇到一个问题,java(服务端)与c#(客户端)通讯,传递一个时间的毫秒数,然后解析成时间串。
Java开发的人都知道
Date date = new Date();
date.getTime();
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
然后通过
Date date = new Date();
date.setTime(date.getTime());
将时间设置回来。这本身没有错,但是要注意了,api中已经明确说明了,是GMT的1970 年 1 月 1 日 00:00:00
意思就是如果你的系统时区不是标准时区(GMT +08)的话会有什么现象呢?
你的时间(标准时区)+时区差(8个小时)- 1970年的标准时间
怎么样,由于系统的时差不同,所得的结果是不一样的。
而项目中的.net开发中计算的都是标准时区的差,所以java服务端解析时时间总是对不上,会差8个小时。同样,你开发的java客户端也会由于时区不同,带来的效果也不一样,以后要多多注意了。
解决方法:尽量所有的东西都不依赖操作系统
1.可以直接设置jvm启动参数
-Duser.timezone=GMT+08
2.在程序里指定
System.setProperty("user.timezone","GMT +08");
3.And so on?