一年的最后一天与明年的第一天相同

时间:2009-10-29 14:24:52

标签: c# calendar

确定一年中的最后一天是否与下一年的第一天相同的最简单方法是什么?

3 个答案:

答案 0 :(得分:7)

这很容易。如果最后一天不是星期天,那么明年的第一天必须在同一周!

当然,取决于你何时开始这一周。

答案 1 :(得分:5)

var lastDay = new DateTime(2009, 12, 31);
var firstDay = new DateTime(2010, 1, 1);

bool isSameWeek = (int)lastDay.DayOfWeek < (int)firstDay.DayOfWeek;

编辑:你没有问这个,但我认为计算两个日期是否在同一周内更有意思。这也适用于您的问题,但它也可以在更广泛的意义上解决问题。它的工作原理是计算每个日期的星期开始,然后比较DateTime值的日期部分是否相同(以防每个日期传入不同的时间)。

/// <summary>
/// Determines whether two dates fall in the same week span.
/// </summary>
/// <param name="left">The left DateTime to compare.</param>
/// <param name="right">The right DateTime to compare.</param>
/// <returns>
/// </returns>
public bool IsSameWeek(DateTime left, DateTime right) {
    return AreDatePartsEqual(GetStartOfWeek(left), GetStartOfWeek(right));
}

/// <summary>
/// Gets the start of week.
/// </summary>
/// <param name="date">The date.</param>
/// <returns></returns>
public DateTime GetStartOfWeek(DateTime date) {
    return date.AddDays(-1 * (int)date.DayOfWeek);
}

/// <summary>
/// Compares two DateTimes using only the Date Part for equality
/// </summary>
/// <param name="left">The left DateTime to compare.</param>
/// <param name="right">The right DateTime to compare.</param>
/// <returns></returns>
public bool AreDatePartsEqual(DateTime left, DateTime right) {
    return
        left.Day == right.Day &&
        left.Month == right.Month &&
        left.Year == right.Year;
}

答案 2 :(得分:4)

只需在12月31日创建一个DateTime对象。如果它没有在星期六,那么1月1日必须在同一周内。

DayOfWeek day = new DateTime(someYear, 12, 31).DayOfWeek;
if(day < DayOfWeek.Saturday)
   // January 1st must be within the same week

编辑:正如Groo指出的那样,本周的开始可能并不总是一个星期天。如果不是,则可以将其设为&lt; = DayOfWeek.Saturday,或使用System.Globalization.CultureInfo.DateTimeFormat.FirstDayOfWeek + 7查找一周的最后一天。