我想确定现在给出的最近时间点和原始时间点。这可以正常工作如下:
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
并且可以编写一些复杂的代码,但也许有一种简单的方法来实现上述目标?
答案 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);