1、首先看以下代碼java
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<day;i++){
startTime = startTime-24*60*60*1000;
endTime = endTime-24*60*60*1000;
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.println("第"+i+"天:");
System.out.print("時間:"+zeroFormat);
System.out.print(" 時間戳:"+startTime+";");
System.out.print(" 時間:"+zeroFormat1);
System.out.println(" 時間戳:"+endTime);
}
}複製代碼
輸出結果以下:express
第0天: 時間:2019-07-10 00:00:00 時間戳:1562688000000; 時間:2019-07-10 23:59:59 時間戳:1562774399999bash
第1天: 時間:2019-07-09 00:00:00 時間戳:1562601600000; 時間:2019-07-09 23:59:59 時間戳:1562687999999
spa============
翻譯.....中間省略......
code============
orm第23天: 時間:2019-06-17 00:00:00 時間戳:1560700800000; 時間:2019-06-17 23:59:59 時間戳:1560787199999
get第24天: 時間:2019-06-16 00:00:00 時間戳:1560614400000; 時間:2019-06-16 23:59:59 時間戳:1560700799999
string第25天: 時間:2019-06-15 00:00:00 時間戳:1560528000000; 時間:2019-06-15 23:59:59 時間戳:1560614399999
it第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
2、再看以下代碼
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型進行計算,則不會出現溢出的狀況,固然也就不會出現上面代碼中時間計算不許確的狀況了