2016-04-20 54 views
0

我有個約會類的工作方法,它具有以下Java的:我怎樣才能創建一個在我的約會類

public class Date { 
    public int month; 
    public int day; 
    public int year; 

    public Date(int m, int d, int y) 
    { 
     month = m; 
     day = d; 
     year = y; 
    } 
    public Date increase(int numberOfDays) 
    { 
     day += numberOfDays; 
     return this; 
    } 

我的問題是什麼是做給天數的增加最簡單的方法給定Date的實例?例如,我創建了一個新的Date(4,20,2016).increase(30)的實例;這將增加給定的日期增加30天。那將是5月19日的某個時候我想的。如果上述方法小於每月的最大日期,則應該使用上述方法。但我還沒有弄清楚如何計算月份和年份。就像我添加365天到那個日期將是4/20/2017。只是一個想法會有所幫助。謝謝

+0

對此的答案是使用日曆類,這可能是您最好的選擇,但如果您堅持使用'日期'類,您需要檢查哪些月有'28,29,30,31'天,那麼如果「日」變量大於本月的多天,則將其設置爲1並增加月份計數器。如果月份計數器大於12,則增加年份並將月份設置爲1. –

回答

1
Date date = new Date(); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
cal.add(Calendar.DATE, 30); // add 30 days 
date = cal.getTime(); 

使用jcalendar您可以添加日期嘗試這個例子

+2

爲什麼downvote? – Priyamal

1

實現這個自己是一個令人驚訝棘手的任務。更重要的是,因爲您將Date存儲爲單獨的month,yearday。您必須存儲有關每月的天數信息以及有關閏年的信息。總之,試圖重新實施Date並不容易。

在Java 8出現之前存儲「日,月,年」日期的一種解決方案是使用Joda。使用Joda的LocalDate類,你可以這樣做:

LocalDate date = LocalDate.now(); 
date = date.plusDays(30); 

這一功能現在在Java中8的java.time封裝,使用相同的LocalDate類名。看看這兩個軟件包的源代碼,看看它是如何實現的。

簡而言之,LocalDate.plusDays()首先使用大約20行的算法將「month,day,year」日期轉換爲自「epoch」以來的單個天數。然後,它將要求的天數添加到該號碼。最後,它使用另一種更長的算法將該數字轉換回「日,月,年」。

+1

好的答案,但我會建議總是將時區傳遞給'now()'方法。如果省略,那麼您的JVM的當前默認時區將被靜默應用。最好指定您的預期/所需時區。 –