静态方法:
因为获取的是UTC时间,需要转成北京时间:
public static Date getLocaleDate(Date date,
int originalTimeZone,int localeTimeZone){
Long newTime = date.getTime();
newTime+=(localeTimeZone-originalTimeZone)*60*60*1000;
Date newDate = new Date(newTime);
return newDate;
}
调用:
vo.setCreateByTime(
TimeUtils.getLocaleDate(vo.getCreateByTime(), 0, 8));//加了8小时
vo.setLastModifyTime(
TimeUtils.getLocaleDate(vo.getCreateByTime(), 0, 8));//怎么又加了8小时?
//此处打印时间与下面打印的相同
Date newdate =TimeUtils.getLocaleDate(vo.getCreateByTime(), 0, 8);
System.out.println(TimeUtils.getLocaleDate(vo.getCreateByTime(), 0, 8));
问题:发现每调用一次静态方法,结果值是叠加的,比如:最开始时间部分为1:00:00,调用一次后为9:00:00,(理所当然),可再调用一次,参数不变(可以保证,也打印结果验证了),但结果却变为17:00。
谁能给我解释下?
第一行 vo.setCreateByTime 已经更改了 createByTime 的值(加了8小时)
第二行 vo.setLastModifyTime 的 参数是 vo.getCreateByTime (此时 第一行已经把 createByTime 的值+8小时了),然后你又加了8小时。。。
newTime+=,而不是=
debug进去看看你传入的date实际值是多少
System.out.println(Demo.getLocaleDate(new Date(),0,8));
System.out.println(Demo.getLocaleDate(new Date(),0,8));
Sat Jul 29 17:44:13 CST 2017
Sat Jul 29 17:44:14 CST 2017
说明你传入的值有可能变了
setCreateByTime 这个方法是啥
不知道你这函数getLocaleDate的定义是什么,转成北京时间的函数?那你把这个函数想的太简单了,你写的应该叫
:为给定时间值加上param3-param2的小时的函数
你调一次加一次。而你所说的问题,是你理解错误而已。
感谢您使用技术问答这个模块,同时对csdn的支持。