博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次时间戳操作的问题
阅读量:5173 次
发布时间:2019-06-13

本文共 3799 字,大约阅读时间需要 12 分钟。

一、首先看如下代码

public static void main(String[] args) {    Long now = 1562724994000L;//查询时间结束的毫秒数    Long old = 1560132994000L;//查询时间开始的毫秒数    long startTime=now/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset()+1000*3600*24;//查询时间结束的第二天零点零分零秒的毫秒数    long endTime=startTime+24*60*60*1000-1;//查询时间的第二天23点59分59秒的毫秒数    long oldDay=old/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//查询时间开始的零点零分零秒的毫秒数    Long day = (startTime-oldDay)/(24*60*60*1000);    for(int i=0;i

输出结果如下:

第0天: 时间:2019-07-10 00:00:00 时间戳:1562688000000; 时间:2019-07-10 23:59:59 时间戳:1562774399999

第1天: 时间:2019-07-09 00:00:00 时间戳:1562601600000; 时间:2019-07-09 23:59:59 时间戳:1562687999999

============

.....中间省略......

 ============

第23天: 时间:2019-06-17 00:00:00 时间戳:1560700800000; 时间:2019-06-17 23:59:59 时间戳:1560787199999

第24天: 时间:2019-06-16 00:00:00 时间戳:1560614400000; 时间:2019-06-16 23:59:59 时间戳:1560700799999

第25天: 时间:2019-06-15 00:00:00 时间戳:1560528000000; 时间:2019-06-15 23:59:59 时间戳:1560614399999

第26天: 时间:2019-06-14 00:00:00 时间戳:1560441600000; 时间:2019-06-14 23:59:59 时间戳:1560527999999

第27天: 时间:2019-06-13 00:00:00 时间戳:1560355200000; 时间:2019-06-13 23:59:59 时间戳:1560441599999

第28天: 时间:2019-06-12 00:00:00 时间戳:1560268800000; 时间:2019-06-12 23:59:59 时间戳:1560355199999

第29天: 时间:2019-06-11 00:00:00 时间戳:1560182400000; 时间:2019-06-11 23:59:59 时间戳:1560268799999

第30天: 时间:2019-06-10 00:00:00 时间戳:1560096000000; 时间:2019-06-10 23:59:59 时间戳:1560182399999

二、再看如下代码

public static void main(String[] args) {    Long now = 1562724994000L;//查询时间结束的毫秒数    Long old = 1560132994000L;//查询时间开始的毫秒数    long zeroDay=now/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//查询时间结束的零点零分零秒的毫秒数    long twelve=zeroDay+24*60*60*1000-1;//查询时间的23点59分59秒的毫秒数    long oldDay=old/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//查询时间开始的零点零分零秒的毫秒数    Long day = (zeroDay-oldDay)/(24*60*60*1000);    for(int i=0;i<=day;i++){        Long startTime = zeroDay-24*60*60*1000*i;        Long endTime = twelve-24*60*60*1000*i;        String zeroFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startTime);        String zeroFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(endTime);        System.out.print("第"+i+"天:");        System.out.print("时间:"+zeroFormat);        System.out.print(" 时间戳:"+startTime+";");        System.out.print(" 时间:"+zeroFormat1);        System.out.println(" 时间戳:"+endTime);    }}复制代码

输出结果如下:

第0天:时间:2019-07-10 00:00:00 时间戳:1562688000000; 时间:2019-07-10 23:59:59 时间戳:1562774399999

第1天:时间:2019-07-09 00:00:00 时间戳:1562601600000; 时间:2019-07-09 23:59:59 时间戳:1562687999999

============

.....中间省略......

============

第23天:时间:2019-06-17 00:00:00 时间戳:1560700800000; 时间:2019-06-17 23:59:59 时间戳:1560787199999

第24天:时间:2019-06-16 00:00:00 时间戳:1560614400000; 时间:2019-06-16 23:59:59 时间戳:1560700799999

第25天:时间:2019-08-03 17:02:47 时间戳:1564822967296; 时间:2019-08-04 17:02:47 时间戳:1564909367295

第26天:时间:2019-08-02 17:02:47 时间戳:1564736567296; 时间:2019-08-03 17:02:47 时间戳:1564822967295

第27天:时间:2019-08-01 17:02:47 时间戳:1564650167296; 时间:2019-08-02 17:02:47 时间戳:1564736567295

第28天:时间:2019-07-31 17:02:47 时间戳:1564563767296; 时间:2019-08-01 17:02:47 时间戳:1564650167295

第29天:时间:2019-07-30 17:02:47 时间戳:1564477367296; 时间:2019-07-31 17:02:47 时间戳:1564563767295

第30天:时间:2019-07-29 17:02:47 时间戳:1564390967296; 时间:2019-07-30 17:02:47 时间戳:1564477367295

注意看两个输出部分的划线部分,你会发现他们不一样......

System.out.println(1560614400000L-24*60*60*1000*25);复制代码

当我们进行如上输出的时候,会发现 提示 Numeric overflow in expression 错误...... 翻译过来就是 表达式中的数字溢出

因为我们后面是用 24*60*60*1000*25的计算方式计算,算出来的是int类型,但是计算值超出了int的值范围 所以提示 Numeric overflow in expression 错误

System.out.println(1560614400000L-24*60*60*1000L*25);复制代码

我们使用上面 24*60*60*1000L*25 的计算就会用long型进行计算,则不会出现溢出的情况,当然也就不会出现上面代码中时间计算不准确的情况了

转载于:https://juejin.im/post/5d2551f96fb9a07ed2249580

你可能感兴趣的文章
二叉树(三)
查看>>
linux加密文件系统 fsck 无法修复一例
查看>>
【linux配置】VMware安装Redhat6.5
查看>>
AI自主决策——有限状态机
查看>>
《http权威指南》阅读笔记(二)
查看>>
软件工程
查看>>
http协议
查看>>
js替换问题replace和replaceAll
查看>>
c++11 : range-based for loop
查看>>
中国农历2013,2014 (zz.IS2120@BG57IV3)
查看>>
用virtualenv建立独立虚拟环境 批量导入模块信息
查看>>
Sublime Text3 插件:convertToUTF8
查看>>
BZOJ4060 : [Cerc2012]Word equations
查看>>
hdu2089不要62(数位dp)
查看>>
JAVA输出最大值和最小值
查看>>
64位weblogic11g安装
查看>>
oracle、mysql、sql server等;流行数据库的链接驱动配置
查看>>
UvaLive 6664 Clock Hands
查看>>
PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现
查看>>
Problem B: 取石子
查看>>