Получение первого и последнего дня недели или месяца с помощью С#
Недавно мне нужно было получить дату первого дня определенной недели в С#. Просмотрев эту довольно запутанную коллекцию ответов , я собрал части различных фрагментов кода в эту небольшую коллекцию служебных методов.
public static partial class DateTimeExtensions
{
public static DateTime FirstDayOfWeek(this DateTime dt)
{
var culture = System.Threading.Thread.CurrentThread.CurrentCulture;
var diff = dt.DayOfWeek - culture.DateTimeFormat.FirstDayOfWeek;
if (diff < 0)
{
diff += 7;
}
return dt.AddDays(-diff).Date;
}
public static DateTime LastDayOfWeek(this DateTime dt) =>
dt.FirstDayOfWeek().AddDays(6);
public static DateTime FirstDayOfMonth(this DateTime dt) =>
new DateTime(dt.Year, dt.Month, 1);
public static DateTime LastDayOfMonth(this DateTime dt) =>
dt.FirstDayOfMonth().AddMonths(1).AddDays(-1);
public static DateTime FirstDayOfNextMonth(this DateTime dt) =>
dt.FirstDayOfMonth().AddMonths(1);
}
Этот FirstDayOfWeek
метод чувствителен к культуре, поэтому в en-GB
культуре первым днем будет понедельник, тогда как в en-US
культуре это будет воскресенье. Учитывая это, теперь вы можете легко получить границы месяца и недели для любого заданного значения DateTime
:
var firstdayOfThisWeek = DateTime.Now.FirstDayOfWeek();
Надеюсь, кто-то еще найдет это полезным!
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.