获取当天零点的毫秒数

获取当天零点的毫秒数

1.通过获取当前时间,取整获取

long zero = System.currentTimeMillis() / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
//System.currentTimeMillis() / (1000 * 3600 * 24) 获取当前时间后取整,得到当天的天数
//System.currentTimeMillis() / (1000 * 3600 * 24) * (1000 * 3600 * 24)取整之后乘以一天的毫秒数,得到当天零点的毫秒数(由于时区的原因,实际得到的是当天早上8点整的毫秒数)
//TimeZone.getDefault().getRawOffset()  减去时区偏移量,得到当天零点的毫秒数

上面这个方法在每天8点之后,确实是可以正确获取到当天0点的毫秒数,但是由于时区原因,每天8点之前获取到的时间取整之后,得到的是前一天早上,乘以一天的毫秒数之后得到的就是前一天早上的8点钟了,再减去时区偏移量,得到前一天早上的0点。
所以这个方法不可取

经评论指正:

上面是由于算法问题:

long zero =  System.currentTimeMillis()- ( System.currentTimeMillis()+ TimeZone.getDefault().getRawOffset()) % (1000 * 3600 * 24);
2. 通过Calendar的方式获取

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
//当天0点
long zero = calendar.getTimeInMillis();

Calendar的方法,通过Calendar.getInstance()的方式,获取到一个初始时间为当前时间的Calendar实例,再通过设置时间的时分秒(毫秒)来让calendar的时间为当天早上0点,然后通过calendar.getTimeInMillis()获取毫秒数。有一个问题,Calendar并不是单例的,当大量执行该代码,会生成有大量的Calendar对象生成?

3.jdk8之后,通过LocalDateTime的方式获取
 //当天0点
 long zero = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();

LocalDateTime 是jdk8新增的一个处理时间的类,这个获取获取0点,主要是设置时间为当天0点(LocalDate:设置年月日;LocalTime:设置:时分秒),然后设置时间偏移量,获取当前设置时间的毫秒数。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值