我遇到一种情况,需要在NodaTime中将Interval值转换为LocalDate的Enumerable集合。我怎样才能做到这一点?


下面是代码

Interval invl = obj.Interval;
//Here is the Interval value i.e.,{2016-10-20T00:00:00Z/2016-11-03T00:00:00Z}


如何在这些间隔之间形成日期范围?

提前致谢。

最佳答案

与Niyoko提供的方法略有不同的方法:


将两个Instant值都转换为LocalDate
在它们之间实现范围


我假设间隔是互斥的-因此,如果终点恰好代表目标时区中的午夜,则排除该日期,否则将其包括在内。

因此,以下方法包括给定时区中间隔内涵盖的每个日期。

public IEnumerable<LocalDate> DatesInInterval(Interval interval, DateTimeZone zone)
{
    LocalDate start = interval.Start.InZone(zone).Date;
    ZonedDateTime endZonedDateTime = interval.End.InZone(zone);
    LocalDate end = endLocalDateTime.Date;
    if (endLocalDateTime.TimeOfDay == LocalTime.Midnight)
    {
        end = end.PlusDays(-1);
    }
    for (LocalDate date = start; date <= end; date = date.PlusDays(1))
    {
        yield return date;
    }
}

关于c# - 如何在NodaTime中将时间间隔转换为LocalDate范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40146344/

10-13 08:43