java基础知识,谁能告诉我静态方法调用怎么会使结果值叠加呢?

静态方法:
因为获取的是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。

谁能给我解释下?

6个回答

第一行 vo.setCreateByTime 已经更改了 createByTime 的值(加了8小时)
第二行 vo.setLastModifyTime 的 参数是 vo.getCreateByTime (此时 第一行已经把 createByTime 的值+8小时了),然后你又加了8小时。。。

qq_19865749
Liekkas_BX 确实啊,感觉有点像背着娃娃找娃娃
2 年多之前 回复

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 这个方法是啥

qq_19865749
Liekkas_BX 方法命名问题,就是创建时间,找到问题了,就是下个网友所说的
2 年多之前 回复

不知道你这函数getLocaleDate的定义是什么,转成北京时间的函数?那你把这个函数想的太简单了,你写的应该叫
:为给定时间值加上param3-param2的小时的函数
你调一次加一次。而你所说的问题,是你理解错误而已。

感谢您使用技术问答这个模块,同时对csdn的支持。

立即提问
相关内容推荐