2012-06-04 95 views
0

我有這樣的代碼在這裏:添加/刪除從日期代碼修復天需要

public static String AddRemoveDays(String date, int days) throws ParseException 
    { 
     SimpleDateFormat k = new SimpleDateFormat("yyyyMMdd"); 
     Date d = k.parse(date); 
     d = new Date(d.getTime() + days*86400000); 
     String time = k.format(d); 

     return time; 
    } 

它以字符串形成「年月日」,並增加了INT天吧。它應該工作,然後日子是消極的 - 那麼他會減少日期的日子。當它是數學時,它返回String形式的「yyyyMMdd」。

至少這是它應該做的。它適用於小數字,但如果我嘗試添加(或刪除),例如,一年(365或-365),則會返回較爲奇怪的日期。

有什麼問題? 我應該做一個完整的另一種方式?

+0

你是什麼意思是「奇怪的日期」?請注意,添加365天不一定與添加一年相同(請參閱:步驟年)。 – npe

+1

你能提供有問題的日期嗎?你在測試什麼日期?不是每年都有365天,不要忘記閏年(2012年是)。 另外,我會推薦使用'Calendar'類,因爲'Date'現在在較新的Java中已被棄用。一個有用的方法是'Calendar.getActualMaximum()',它將根據當前年份是否爲閏年返回一年中的正確天數。此外,'日曆'與其內部的數學更聰明,並會增加日期時將滾動各種值。 – gnomed

+0

我知道這不是,它只是一個例子,這就是爲什麼我要用毫秒計算。 嘗試參數(「20120605」,365)或(「20120605」,45)。 我怎樣才能做到這一點日曆? – Karlovsky120

回答

5
d = new Date(d.getTime() + days*86400000); 

如果乘以365整數的86400000不能保持它。將86400000更改爲長

d = new Date(d.getTime() + days*86400000L); 

它會沒事的。

+0

謝謝,現在它工作。我現在可以添加/刪除數千年! =) – Karlovsky120

+1

雖然OP應該使用更精確的東西(比如Joda Time或Calendar),但這個答案完全符合他的要求。 +1 –

+0

@ Karlovsky120 - 86400000 * 1000!= 1000年。 –

2

很難說沒有特定日期的情況。

如果您致力於使用原始Java類執行此操作,您可能需要查看使用Calendar -e.g.

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(d); 
calendar.add(Calendar.DATE, days); // this supports negative values for days; 
d = calendar.getTime(); 

這就是說,我會建議轉向清除Java Date類的,看看使用jodaTimejsr310代替。

例如在jsr310,你可以使用一個DateTimeFormatterLocalDate

DateTimeFormatter format = DateTimeFormatters.pattern("yyyyMMdd"); 
LocalDate orig = format.parse(dateString, LocalDate.rule()); 
LocalDate inc = orig.plusDays(days); // again, days can be negative; 
return format.print(inc);