由于近期需要处理获取当天零时时间戳的需求,在网上搜索了一下,大多给
出的答案如下:
<code>
public static void main(String[] args) {
long current=System.currentTimeMillis();//当前时间毫秒数
long zero=current/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();
System.out.println(new Timestamp(zero));//今天零点零分零秒
}
</code>
自己不假思索也用了一把,结果被打脸了~
下来仔细看了下这个代码,发现是有个小小的误区的~
就是除数86400000如果大于TimeZone.getDefault().getRawOffset(),会出现跨天的现象,导致结果是错误的。
以东八区为例,如果当前时间为2017/07/20/06:00:00,得出的zero则为2017/07/19/00:00:00。
可将代码修改如下:
<code>
public static void main(String[] args) {
long current=System.currentTimeMillis();//当前时间毫秒数
long tmp = imeZone.getDefault().getRawOffset();
long zero=(current+tmp)/(1000*3600*24)*(1000*3600*24)-tmp;
System.out.println(new Timestamp(zero));//今天零点零分零秒
}
</code>
网友评论