微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在给定日期的一周内获得工作日?

如何解决如何在给定日期的一周内获得工作日?

这个问题可能不是最明确的问题,但这是我需要的:

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);

您也可以将这些调节器与LocalDateTimeOffsetDateTime一起使用。

,

这是我想出的:

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 举报,一经查实,本站将立刻删除。