2013-01-03 40 views
6

以下是我用來訪問過去10天前的日期的代碼。輸出是今天的日期'20130103'。我如何返回今天的日期 - 10天?我限於使用內置的java日期類,所以不能使用joda時間。使用java.util.Date獲取日期

package past.date; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class PastDate { 

    public static void main(String args[]){ 

     DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
     Date myDate = new Date(System.currentTimeMillis()); 
     Date oneDayBefore = new Date(myDate.getTime() - 10);  
     String dateStr = dateFormat.format(oneDayBefore);  
     System.out.println("result is "+dateStr); 

    } 

} 
+1

你看過[javadocs](http://docs.oracle.com/javase/7/docs/api/java/util/Date.html)嗎?日期構造函數以毫秒爲單位,而不是以天爲單位的值。此外,要考慮時區/ DST問題,請查看「日曆」。 – BalusC

+0

修改此答案:http://stackoverflow.com/questions/5894726/how-do-i-do-calendar-arithmetic-with-java-util-date – mcalex

+0

本身不回答你的問題,但你可能會感興趣的http://stackoverflow.com/questions/11727933/add-30-days-to-date-in-java?rq=1這告訴你如何添加到日子裏,也許你可以轉置它減去。 – sircapsalot

回答

12

,你可以操縱日期日曆的方法。

  DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
      Date myDate = new Date(System.currentTimeMillis()); 
      System.out.println("result is "+ dateFormat.format(myDate)); 
      Calendar cal = Calendar.getInstance(); 
      cal.setTime(myDate); 
      cal.add(Calendar.DATE, -10); 
      System.out.println(dateFormat.format(cal.getTime())); 
2

類Date表示特定的瞬間,精確到毫秒。

​​

所以在這裏你減去只有10毫秒,但你需要通過乘以減去10天10 * 24 * 60 * 60 * 1000

5

此行

Date oneDayBefore = new Date(myDate.getTime() - 10);  

將日期設置回10毫秒,而不是10天。最簡單的辦法是隻減去10天的毫秒數:

Date tenDaysBefore = new Date(myDate.getTime() - (10 * 24 * 60 * 60 * 1000));  
+1

直接用這樣的毫秒工作會有點狡猾 - 夏令時將取消。節電器使用日曆內置方法。 –

3

使用Calendar.add(Calendar.DAY_OF_MONTH, -10)

1
Date today = new Date(); 
Calendar cal = new GregorianCalendar(); 
cal.setTime(today); 
cal.add(Calendar.DAY_OF_MONTH, -30); 
Date today30 = cal.getTime(); 
System.out.println(today30); 
+0

儘管此代碼可能會解決發佈者的問題,但有幾行解釋會幫助閱讀此帖子的每個人都瞭解該解決方案。 – Thom