在闰年中给出最近可能的日期和原始日期

时间:2014-11-23 17:18:53

标签: c# .net

我想确定现在给出的最近时间点和原始时间点。这可以正常工作如下:

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

并且可以编写一些复杂的代码,但也许有一种简单的方法来实现上述目标?

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题是对的。什么是最近的时间点。是2月28日还是3月1日?我会这样做

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
);

不确定这是否算'复杂'或甚至算作最接近的时间点,但我希望这会有所帮助

答案 1 :(得分:0)

我也不确定我是否理解正确,但在我看来,您希望第二天(如果给定日期比当前日期更大)或前一天。

在这种情况下,做起来会更容易:

        DateTime originalPointInTime ;
        DateTime now ;

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

        now.AddDays(addDay);
相关问题