`

java date 归一化"天"

    博客分类:
  • java
阅读更多

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年。

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics