Последний день года на той же неделе, что и первый день следующего года - PullRequest
0 голосов
/ 29 октября 2009

Какой самый простой способ определить, приходится ли последний день года на ту же неделю, что и первый день следующего года?

Ответы [ 3 ]

7 голосов
/ 29 октября 2009

Это довольно просто. Если последний день не является воскресным, то первый день следующего года должен быть на той же неделе!

Конечно, в зависимости от того, когда вы начинаете неделю.

5 голосов
/ 29 октября 2009
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;
}
4 голосов
/ 29 октября 2009

Просто создайте объект DateTime на 31 декабря. Если в субботу не выпадает, то 1 января должно быть в течение той же недели.

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

Редактировать: Как указывал Груо, начало недели не всегда может быть воскресеньем. Если это не так, то вы можете сделать это <= DayOfWeek.Saturday или использовать System.Globalization.CultureInfo.DateTimeFormat.FirstDayOfWeek + 7, чтобы найти последний день недели. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...