2016-11-04 105 views
0

我已经用c#很多地使用了NodaTime,它非常棒,但是在试图获取两个LocalDateTimes之间的总分钟时被抓住了。我的两次相距超过一周。nodatime时间之间的总分钟数

这并不能提供有效的结果: (1)

long Mns = Period.Between(nowLdt,triggerLdt).Ticks.ToSeconds()/60; 

这不会带来正确的结果: (2)

double Mns = Period.Between(nowLdt,triggerLdt).ToDuration().ToTimeSpan().TotalMinutes; 

所以我的问题真的是3个问题:

为什么NodaTime没有TotalMinutes功能?

为什么上面的(1)不起作用?

有没有比(2)更干净的方法?

+0

你确定你应该在这里使用当地的日期和时间吗?当你在谈论“总分钟数”时,听起来像你更有可能在一段时间内感兴趣。特别是一个“触发器”听起来像是某个特定时区中的某种东西,代表瞬间即时。也许你应该使用适当的时区将这两个值转换为Instants,然后计算它们之间的持续时间? –

回答

4

只需使用Period.Between静态方法,并指定单位,你想输出到代表。

Period p = Period.Between(start, end, PeriodUnits.Minutes); 
long totalMinutes = p.Minutes; 

如果不指定PeriodUnits明确,则默认为PeriodUnits.DateAndTime。这将返回一个Period,其中包含所有可能的日期和时间属性(除周),因此Minutes属性的分钟数不到一个小时。

换句话说,使用Period.Between而不指定单元是像要求Minutes上的TimeSpan,同时指定PeriodUnits.Minutes就像要求TotalMinutes上的时间跨度。无论以哪种方式使用PeriodMinutes属性 - 它只是控制Period的构建方式。

+0

@Jon,收到您的评论 - 谢谢。是的,这种特殊的情况可以通过任何方式完成,但是通过ZonedDateTime/Instant路径使用持续时间稍微更有用。所以我去了LocalDateTime/Period路线,并迷上了我错过的技术细节。 – user3152403

+0

这正是我所寻找的,并回答了我原来的三个问题。感谢您的回应。随着时间的推移,人们必须非常小心! – user3152403