2017-03-09 73 views
3

我的目標是計算兩個日期之間的差異,然後將該天數添加到原始開始日期。將兩個日期的差異添加到另一個日期,避免閏年

DateTime originalStart = new DateTime(2015, 1, 1); 
DateTime newDate = originalStart.AddDays((endDate - startDate).TotalDays); 

例如具有以下PARAMS:
原來的開始:1/1/2015
開始日期:2016年1月1日
結束日期:2017年1月1日

newDate應該是: 1/1/2016(開始和結束之間的區別是1年,所以然後我們將這一年添加到原始開始)

我的問題我如果閏年是endDate和startDate之間的日期差異的一部分,然後我去並將這些天添加到originalStart。我最終以newdate的日期爲1/2/2016。

任何想法如何我可以避免在這裏閏年,以確定1/1/2016和1/1/2017之間的差異是四捨五入的。我只想添加到originalStart一年,而不是因爲閏年的額外一天。

+1

[只要檢查一年是否是一個閏年並採取適當的行動](https://msdn.microsoft.com/en-us/library/system.datetime.isleapyear(v = vs.110)的.aspx)。 – Equalsk

+2

首先檢查任何開始或結束年份是否爲閏年。然後檢查2月29日是否在您的目標時間範圍內。如果是這樣,有一天減少。 –

+0

什麼意思是「避免學習年」呢?如果時間跨度重疊兩個閏年,那麼期望的結果是什麼?但是如果將此時間跨度添加到originalStart,則只會重疊一個閏年? –

回答

0
DateTime originalStart = new DateTime(2015, 1, 1); 
    DateTime zeroTime = new DateTime(1, 1, 1); 
    DateTime endDate = new DateTime(2016, 1,1); 
    endDate .Dump(); 
    DateTime startDate= new DateTime(2017, 1,1); 
    startDate.Dump(); 

    TimeSpan span = startDate- endDate ; 

    // because we start at year 1 for the Gregorian 
    // calendar, we must subtract a year here. 

    int years = (zeroTime + span).Year - 1; 
    int months = (zeroTime + span).Month - 1; 
    int days = (zeroTime + span).Day; 

    years.Dump(); 
    months.Dump(); 
    days.Dump(); 
originalStart= originalStart.AddMonths(months); 
originalStart = originalStart.AddYears(years); 
originalStart = originalStart.AddDays(days); 
+0

我沒有訪問轉儲()它是什麼? –

+0

@BlakeRivell這可能是在LinqPad中創建的,它使用'Dump'將對象寫入控制檯。所以你可以用'Console.WriteLine'調用替換它們。 – juharr

+0

我假設你的意思是「AddYears(年)」而不是「AddYears(天)」。 – juharr