Java:取得當前日期一周之前/之后的日期,或者是一月之前/之后的日期


一. 舊的方式

參考以前的博客:Java中日期容易計算錯誤的問題

1. 需求

取得當前時間前一周的時間。比如說:今天是2009-4-23,運行結果則為:2009-4-16。

代碼:一般人肯定會這樣寫:

String lastModified = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date((new java.util.Date().getTime() - 7*24*60*60*1000)));

表面上看結果是正確的。

2. 問題

如果想取得當前時間前一個月的時間,直接修改上面的7為30,形如:30 * 24 * 60 * 60 * 1000,結果肯定不是你想要的2009-3-24。而是2009-5-13,你沒看錯!

3. 原因

java日期的數值表達值為long類型的,應該用long型參數去做操作。7 * 24 * 60 * 60 * 1000默認為整型操作,它沒有溢出;但30 * 24 * 60 * 60 * 1000對於整型來說是溢出的,變成負數,所以日期反而加大。

4. 解決

String lastModified = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date((new java.util.Date().getTime() - (long)30*24*60*60*1000)));

這樣寫就可以解決問題了。

二. 新的方式

    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
    java.util.Calendar cal = java.util.Calendar.getInstance();
    cal.setTime(sdf.parse("2009-4-23"));
    cal.add(java.util.Calendar.DATE, -7); // 向前一周;如果需要向后一周,用正數即可
//    cal.add(java.util.Calendar.MONTH, -1); // 向前一月;如果需要向后一月,用正數即可
    System.out.println(sdf.format(cal.getTime()));

這樣就可以取得一個月以前或者是一周以前的日期了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM