NodaTime中每月和每周的LocalDate

时间:2014-06-24 14:26:07

标签: c# .net date dayofweek nodatime

我希望根据描述来构建日期,例如" 2014年3月的第二个星期一"。 我该怎么做呢? LocalDate FromWeekYearWeekAndDay似乎是一个开始,但正如我所说,我希望提供本月的一周,而不是一年中的一周。

1 个答案:

答案 0 :(得分:3)

这肯定可以改进,但这是一个可行的功能:

public static LocalDate GetDay(int year, int month, IsoDayOfWeek dayOfWeek,
                                                                    int instance)
{
    int daysInMonth = CalendarSystem.Iso.GetDaysInMonth(year, month);

    var ld = new LocalDate(year, month, 1);
    if (ld.IsoDayOfWeek != dayOfWeek)
        ld = ld.Next(dayOfWeek);
    for (int i = 1; i < instance && ld.Day + 7 <= daysInMonth; i++)
        ld = ld.PlusWeeks(1);
    return ld;
}

如果你想要 last ,那么你可以为实例传递5,这可能会在第4或第5周落下。

优化可能包括对其他日历的支持,以及更好地使用模数学来避免循环。

(已提交A feature request,并且可能在2.0中得到支持。)