例如,如果我有以下代码:
var nodaStart = new LocalDate(2012, 5, 1);
var nodaEnd = new LocalDate(2012,5,2);
var daysBetween = Period.Between(nodaStart, nodaEnd,PeriodUnits.Day);
然后daysBetween.Days == 1
但是,我计算的范围需要计算为2天。即它需要包括开始和结束日期。
实际方法可以采取开始和结束日期(相隔不超过一年)并且需要计算天数。如果超过31天,则剩余的数量将返回整周。
我的逻辑工作正常,但由于计数是独家的,我有一天会出去。
我想我可以在创建startDate.addDays(-1)
之前做nodaStart
,但我想知道是否有更优雅/漂亮的方式让noda返回句号。
由于
更新:
我已阅读Period
类的the source code,且+
运算符已重载,因此我可以添加
daysBetween += Period.FromDays(1);
答案 0 :(得分:6)
(对不起,我花了很长时间才回答这个问题 - 我之前没见过。)
任何:
应该没问题。我认为Noda Time不会改变这一点。 Between
是一种减法运算符的“模糊周围单位”版本 - 你不会发现许多减法运算符,其中2 - 1是2。
答案 1 :(得分:0)
对于“模糊”大脑的人,如果它识别出一天,一周,一个月等,我们可以考虑一段时间为包含的开始和结束日期(参见整数倍) ),所以你可以编码:
var start = new NodaTime.LocalDateTime(s.Year, s.Month, s.Day, s.Hour, s.Minute);
var end = new NodaTime.LocalDateTime(e.Year, e.Month, e.Day, e.Hour, e.Minute);
NodaTime.Period periodInclusive = NodaTime.Period.Between(start, end.PlusDays(1), NodaTime.PeriodUnits.AllDateUnits);
NodaTime.Period period = NodaTime.Period.Between(start, end, NodaTime.PeriodUnits.AllDateUnits);
bool isInclusivePeriod = periodInclusive.Days + periodInclusive.Weeks + periodInclusive.Months + periodInclusive.Years <
period.Days + period.Weeks + period.Months + period.Years;
period = isInclusivePeriod ? periodInclusive : period;
// do stuff with period here....