2009-04-13 90 views
15

我假設Java有一些內置的方法來做到這一點。如何確定Java中給定日期之前一天的日期?

給定一個日期,如何確定該日期前一天的日期?

例如,假設我給了3/1/2009。之前的日期是2/28/2009。如果我在2008年3月1日前得到了,那麼以前的日期應該是2/29/2008。

+0

提示建議喬達時間的答案數量超過/少於3.5。我會接管。 – 2009-04-13 21:16:30

+3

sleep(-86400); Date.getDate()? :-) – Tanktalus 2009-04-13 21:16:50

回答

45

使用日曆界面。

Calendar cal = Calendar.getInstance(); 
cal.setTime(myDate); 
cal.add(Calendar.DAY_OF_YEAR,-1); 
Date oneDayBefore= cal.getTime(); 

以這種方式做「添加」可以保證您獲得有效的日期。這一年也是有效的,例如如果myDate是2012年1月1日,oneDayBefore將是2011年12月31日。

0
import java.util.Calendar; 
import java.util.GregorianCalendar; 
import static java.util.Calendar.*; 


public class TestDayBefore { 

    public static void main(String... args) { 
     Calendar calendar = GregorianCalendar.getInstance(); 
     calendar.set(YEAR, 2009); 
     calendar.set(MONTH, MARCH); 
     calendar.set(DAY_OF_MONTH, 1); 
     System.out.println(calendar.getTime()); //prints Sun Mar 01 23:20:20 EET 2009 
     calendar.add(DAY_OF_MONTH, -1); 
     System.out.println(calendar.getTime()); //prints Sat Feb 28 23:21:01 EET 2009 

    } 
} 
7

您還可以使用Joda-Time,有很好的Java庫來操縱日期:

DateTime result = dt.minusDays(1); 
1

隨着date4j庫:

DateTime yesterday = today.minusDays(1); 
1

這會有所幫助。

getPreviousDateForGivenDate("2015-01-19", 10); 
getPreviousDateForGivenDate("2015-01-19", -10); 

public static String getPreviousDateForGivenDate(String givenDate, int datesPriorOrAfter) { 
    String saleDate = getPreviousDate(datesPriorOrAfter); 

    try { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     String[] arr = givenDate.split("-", 3); 
     Calendar cal = new GregorianCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1])-1, Integer.parseInt(arr[2])); 
     cal.add(Calendar.DAY_OF_YEAR, datesPriorOrAfter);  
     saleDate = dateFormat.format(cal.getTime()); 

    } catch (Exception e) { 
     System.out.println("Error at getPreviousDateForGivenDate():"+e.getMessage()); 
    } 

    return saleDate; 
} 
相關問題