记一次时间计算 Java

 希望结果  获取30万个计算后的时间插入数据表, 每次时间加上 一分钟

 

for (int l = 0; l < 300000; l++) {
    long temp = date.getTime() + l*6*10000; 

    Date expireTime1 = new Date(temp);

    System.out.println(df.format(expireTime1) + "     " + count);
}


//不能计算到 2020-06    算着算着出现负数
-456849184  i==278717    2019-11-06 04:08:50
-456789184  i==278718    2019-11-06 04:09:50
-456729184  i==278719    2019-11-06 04:10:50

推测是越限了 ,   但查了一下 long的取值范围  ,并没有出现异常

//                         2147483648    int
//                      1573441380000    需要
//                9223372036854775807    long

 

成功计算到 2020-06 

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = df.parse("2019-11-11 11:03");
for (int l = 0; l < 300000; l++) {
    long count = l*6;
    long temp = date.getTime() + count*10000;

    Date expireTime1 = new Date(temp);

    System.out.println(df.format(expireTime1) + "     " + count);
}

想一下,为什么 一个long计算时会越限了,两个long又不会 ,它们最终结果是一致的

long count = l*6;
long temp = date.getTime() + count*10000;

//long temp = date.getTime() + l*6*10000; 

发现我们的L变量是 int类型 ,你看出问题了吗?    l*6*10000 超出int的取值范围

正确结果

for (int l = 0; l < 300000; l++) {
    long temp = (long)l*6*10000 +date.getTime() ;
    Date expireTime1 = new Date(temp);

    System.out.println(df.format(expireTime1) + "     " + count);
}

或者

for (long l = 0; l < 300000; l++) {
    long temp = l*6*10000 +date.getTime() ;
    Date expireTime1 = new Date(temp);

    System.out.println(df.format(expireTime1) + "     " + count);
}

 

 

 

 

疑问二:  去除循环时的临时变量  (未解决)

# 优化  避免大量创建临时变量
long count;long temp;   
for (int l = 0; l < 300000; l++) {
        count = l*6;
        temp = date.getTime() + count*10000;

        Date expireTime1 = new Date(temp);

        System.out.println(df.format(expireTime1) + "     " + count);
}

第一个for循环花费     4365  

第二个for循环花费     4657

为什么有优化反而不如不优化,知识有限,以后探讨

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huang_ftpjh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值