2014-11-23 57 views
0

我想確定現在給出的最接近時間點和原始時間點。這工作正常如下:獲取NOW和閏年原始日期的最接近可能日期

var originalPointInTime = new DateTime(2016, 3, 29); 
var now = new DateTime(2017, 2, 3); 

var closestDay1 = new DateTime 
(
now.Year, 
originalPointInTime.Month, 
originalPointInTime.Day, 
originalPointInTime.Hour, 
originalPointInTime.Minute, 
originalPointInTime.Second, 
originalPointInTime.Millisecond 
); 

但是,如果我及時用閏年來看它的確不是:

var leapYearPointInTime = new DateTime(2016, 2, 29); 

var closestDay2 = new DateTime 
(
    now.Year, 
    leapYearPointInTime.Month, 
    leapYearPointInTime.Day, 
    leapYearPointInTime.Hour, 
    leapYearPointInTime.Minute, 
    leapYearPointInTime.Second, 
    leapYearPointInTime.Millisecond 
); 

有沒有一種簡單的方法來得到這個閏年工作?我知道:

DateTime.IsLeapYear 

並可以寫一些令人費解的代碼,但也許有一個簡單的方法來實現上述?

回答

1

我不確定我是否理解你的問題。什麼是最接近的時間點。會是2月28日還是3月?我只想做這個

DateTime now = DateTime.Now; 

var leapYearPointInTime = new DateTime(2016, 2, 29); 

if (DateTime.IsLeapYear(leapYearPointInTime.Year)) 
    if (2 == leapYearPointInTime.Month) 
     if (29 == leapYearPointInTime.Day) 
      leapYearPointInTime = leapYearPointInTime.Add(new TimeSpan(-1, 0, 0, 0)); 

var closestDay2 = new DateTime 
(
    now.Year, 
    leapYearPointInTime.Month, 
    leapYearPointInTime.Day, 
    leapYearPointInTime.Hour, 
    leapYearPointInTime.Minute, 
    leapYearPointInTime.Second, 
    leapYearPointInTime.Millisecond 
); 

不知道這算作是「令人費解的」,甚至算作在時間的最近點,但我希望這有助於

+0

這將是閏年例如,對於closestDay2 2017年2月28日。問題在於2017年不是閏年 - 因此使用29個原因異常。 – cs0815 2014-11-23 17:55:58

+0

如果您使用AddDays(-1),則您的代碼將起作用。謝謝。在.net中實現這一點似乎仍然很複雜,你不覺得嗎? – cs0815 2014-11-23 17:58:10

+0

更正了一個錯誤。由於DateTime是一個值類型,您需要保存更新的值。是的,它看起來有點亂... – Benj 2014-11-23 18:10:41

0

我也不能肯定,如果我理解正確,但在我看來,你希望第二天(如果給定的日期比當前更大)或前一天得到。

在這種情況下,它會更容易只是做:

 DateTime originalPointInTime ; 
     DateTime now ; 

     var addDay = originalPointInTime > now ? 1 :-1; 

     now.AddDays(addDay);