如何在给定日期的一周内获得工作日?
How to get the week day within a week of given date?
这个问题可能不是最清楚的,但这是我需要的:
var date = new LocalDate(2020, 05, 05);
我需要给定日期所在一周的星期一和星期五的日期。
这是我想出的:
void Main()
{
var date = new LocalDate(2020, 05, 05);
var yearWeek = WeekYearRules.Iso.GetWeekOfWeekYear(date);
var monday = WeekYearRules.Iso.GetLocalDate(date.Year, yearWeek, IsoDayOfWeek.Monday);
var friday = WeekYearRules.Iso.GetLocalDate(date.Year, yearWeek, IsoDayOfWeek.Friday);
Console.WriteLine(monday);
Console.WriteLine(friday);
}
或者您可以将此逻辑提取到扩展方法中,这样您就可以获得:
void Main()
{
var date = new LocalDate(2020, 05, 05);
var monday = date.GetDateOfWeekDay(IsoDayOfWeek.Monday);
var friday = date.GetDateOfWeekDay(IsoDayOfWeek.Friday);
Console.WriteLine(monday);
Console.WriteLine(friday);
}
public static class LocalDateTimeExtensions {
// I coudn't come up with better name for this function, if you have any suggestions... :)
public static LocalDate GetDateOfWeekDay(this LocalDate date, IsoDayOfWeek dayOfWeek)
{
var currentWeekYear = WeekYearRules.Iso.GetWeekOfWeekYear(date);
return WeekYearRules.Iso.GetLocalDate(date.Year, currentWeekYear, dayOfWeek);
}
}
我建议将代码编写为 日期调整器:
public static class DayOfWeekAdjusters
{
public static Func<LocalDate, LocalDate> ForIsoDayOfWeek(IsoDayOfWeek dayOfWeek) =>
date => WeekYearRules.Iso.GetLocalDate(
WeekYearRules.Iso.GetWeekYear(date),
WeekYearRules.Iso.GetWeekOfWeekYear(date),
dayOfWeek);
}
那么你可以使用:
private static readonly Func<LocalDate, LocalDate> MondayAdjuster =
DayOfWeekAdjusters.ForIsoDayOfWeek(IsoDayOfWeek.Monday);
private static readonly Func<LocalDate, LocalDate> FridayAdjuster =
DayOfWeekAdjusters.ForIsoDayOfWeek(IsoDayOfWeek.Friday);
...
var date = new LocalDate(2020, 05, 05);
var monday = date.With(MondayAdjuster);
var friday = date.With(FridayAdjuster);
您也可以将这些调节器与 LocalDateTime
和 OffsetDateTime
一起使用。
这个问题可能不是最清楚的,但这是我需要的:
var date = new LocalDate(2020, 05, 05);
我需要给定日期所在一周的星期一和星期五的日期。
这是我想出的:
void Main()
{
var date = new LocalDate(2020, 05, 05);
var yearWeek = WeekYearRules.Iso.GetWeekOfWeekYear(date);
var monday = WeekYearRules.Iso.GetLocalDate(date.Year, yearWeek, IsoDayOfWeek.Monday);
var friday = WeekYearRules.Iso.GetLocalDate(date.Year, yearWeek, IsoDayOfWeek.Friday);
Console.WriteLine(monday);
Console.WriteLine(friday);
}
或者您可以将此逻辑提取到扩展方法中,这样您就可以获得:
void Main()
{
var date = new LocalDate(2020, 05, 05);
var monday = date.GetDateOfWeekDay(IsoDayOfWeek.Monday);
var friday = date.GetDateOfWeekDay(IsoDayOfWeek.Friday);
Console.WriteLine(monday);
Console.WriteLine(friday);
}
public static class LocalDateTimeExtensions {
// I coudn't come up with better name for this function, if you have any suggestions... :)
public static LocalDate GetDateOfWeekDay(this LocalDate date, IsoDayOfWeek dayOfWeek)
{
var currentWeekYear = WeekYearRules.Iso.GetWeekOfWeekYear(date);
return WeekYearRules.Iso.GetLocalDate(date.Year, currentWeekYear, dayOfWeek);
}
}
我建议将代码编写为 日期调整器:
public static class DayOfWeekAdjusters
{
public static Func<LocalDate, LocalDate> ForIsoDayOfWeek(IsoDayOfWeek dayOfWeek) =>
date => WeekYearRules.Iso.GetLocalDate(
WeekYearRules.Iso.GetWeekYear(date),
WeekYearRules.Iso.GetWeekOfWeekYear(date),
dayOfWeek);
}
那么你可以使用:
private static readonly Func<LocalDate, LocalDate> MondayAdjuster =
DayOfWeekAdjusters.ForIsoDayOfWeek(IsoDayOfWeek.Monday);
private static readonly Func<LocalDate, LocalDate> FridayAdjuster =
DayOfWeekAdjusters.ForIsoDayOfWeek(IsoDayOfWeek.Friday);
...
var date = new LocalDate(2020, 05, 05);
var monday = date.With(MondayAdjuster);
var friday = date.With(FridayAdjuster);
您也可以将这些调节器与 LocalDateTime
和 OffsetDateTime
一起使用。