2011-05-24 28 views
2

請幫我寫一個方法,它返回從提供的日期到今天的日期的天數(int)。因此,假設我正在向方法提供一個int 110515(2011年5月15日)。它應該返回9(包含或排他對我不重要)。如何編寫一個方法,該方法返回從提供日期到今天日期的天數(int)?

+1

什麼樣的表示是110515,它是如何編碼的?你從哪裏得到這個號碼? – 2011-05-24 23:57:27

+0

@GregaKešpret:YYMMDD。它是一個整數。我會手動通過它。 – Prostak 2011-05-24 23:59:31

+0

哦對不起:)我期待「Excel」int編碼日期或類似的東西。我們總是想念太明顯的事情。 – 2011-05-25 00:01:56

回答

0

未來的日期應包括當前日期嗎?意思是如果今天是2011年5月24日,110529應該是4還是5?

public static long numberOfDays(final long date) throws ParseException { 
    final Calendar compare = Calendar.getInstance(); 
    compare.setTime(new SimpleDateFormat("yyMMdd").parse(String.valueOf(date))); 
    final int dstOffset = compare.get(Calendar.DST_OFFSET); 
    final long currentTimeMillis = System.currentTimeMillis(); 
    final long compareTimeInMillis = compare.getTimeInMillis(); 
    long difference = 0; 
    if (currentTimeMillis >= compareTimeInMillis) { 
     difference = currentTimeMillis - compareTimeInMillis - dstOffset; 
    } else { 
     difference = compareTimeInMillis - currentTimeMillis + dstOffset; 
    } 
    return difference/(24 * 60 * 60 * 1000); 
} 
+0

它看起來不像一種方法。你可以修改它作爲一種方法嗎? – Prostak 2011-05-25 00:18:52

2

如果你可以使用喬達,這是超級簡單:

Days d = Days.daysBetween(startDate, endDate); 
int days = d.getDays(); 

當然,你可以將其組合。

int days = Days.daysBetween(startDate, endDate).getDays(); 

Joda對象可以很容易地在JDK的日期類之間來回切換。

對於第一部分,製作再DateFormatter解析基於它的字符串,像這樣:(轉動INT變成理所當然的字符串後)

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd"); 
DateTime dt = fmt.parseDateTime(strInputDateTime); 

+0

喬達是什麼?這是一個新圖書館嗎?我需要導入它嗎?當我粘貼您的代碼時,DateTime無法識別。 – Prostak 2011-05-25 00:07:46

+0

這是一個時間/日期庫,比JDK date stuff(這是braindead)好大約100倍。如果您使用Maven,只需將它們添加爲依賴項,否則,請下載。每個人都使用它。小小的lib,非常乾淨的代碼(與JDK上的可比較的機器相比)。 – Rob 2011-05-25 00:09:59

+0

http://joda-time.sourceforge.net/faq.html – Rob 2011-05-25 00:10:18

0

因爲這看起來像一個家庭作業問題我會幫你解決的。您將需要使用Calendar.getTimeInMillis。然後你會想要創建一個常量,即NUMBER_OF_MILLIS_IN_DAY。從那裏你從currentDate減去initialDate(兩個時間毫秒)併除以常數。