如何解决如何在给定日期的一周内获得工作日?
这个问题可能不是最明确的问题,但这是我需要的:
var date = new LocalDate(2020,05,05);
我需要给定日期所在的一周的星期一和星期五的日期。
解决方法
我建议将代码作为日期调整器 :
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
一起使用。
这是我想出的:
void Main()
{
var date = new LocalDate(2020,05);
var yearWeek = WeekYearRules.Iso.GetWeekOfWeekYear(date);
var monday = WeekYearRules.Iso.GetLocalDate(date.Year,yearWeek,IsoDayOfWeek.Monday);
var friday = WeekYearRules.Iso.GetLocalDate(date.Year,IsoDayOfWeek.Friday);
Console.WriteLine(monday);
Console.WriteLine(friday);
}
或者您可以将此逻辑提取到扩展方法中,以便获得:
void Main()
{
var date = new LocalDate(2020,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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。