java date 归一化"天"

本文介绍了如何在Java中将Date对象归一化到天、月、年的具体方法,并探讨了Date对象与时区的关系,提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中date只是用来表示日期,一直认为和时区没有关系;实际使用中也没有遇到过问题,只要你不要getTime()对其进行设么操作。最近遇到想要把一个date归一化到天(天以下的单位全部设置为零,比如2012-1-1 8:32:22->2012-1-1 00:00:00),傻办法就是直接使用calendar.set(...),但是感觉很累,没有技术含量,于是深究了下timemillions.

 

好了, 首先看文档说话,Date.getTime() 的javadoc说“Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.” 注意GMT是亮点,一旦出现时区事情总是变得有点复杂。

看了Date类代码,确认这货和calendar有关,那肯定和时区有关。。

打印 new Date(70, 0, 1).getTime() //1970-1-1,打印出-28800000,确认是8个小时毫秒数(亦即东八区,中国的时区),好了基本知道该怎么办了。

 

new Date(((new Date().getTime() + TimeZone.getDefault().getRawOffset()) / (1000 * 60 * 60 * 24)*(1000 * 60 * 60 * 24))
						- TimeZone.getDefault().getRawOffset())
 

搞定,这就是我们需要的归一化后的日期(到1天),也就是当前天零点;同理,你也可以在此基础上归一化n月、n年。

注:上面可能会有夏令时的问题,中国么可以暂时忽略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值