如何在 NodaTime 中查找一天中的小时数?

How to find amount of hours in a day in NodaTime?

我正在编写一个测试应用程序来重现一些数据写入场景 - 一个每小时运行的任务。
为此,我需要知道它将执行多少次 - 有多少小时在给定的一天。我试着这样做:
Period.Between(localDateTimeStart.Date, localDateTimeStart.Date.PlusDays(1), PeriodUnits.Hours)
但它给了我 ArgumentException 说 Units contains time units: Hours。在 NodaTime 中执行此操作的惯用方法是什么?还是我的做法不对?

在两个 local date/time 值之间,总会有 24 小时。听起来您对特定 zone 中的日期感兴趣,在这种情况下您需要:

 var startOfDay = zone.AtStartOfDay(date);
 var startOfNextDay = zone.AtStartOfDay(date.PlusDays(1));
 var duration = startOfNextDay.ToInstant() - startOfDay.ToInstant();
 var hours = duration.Ticks / NodaConstants.TicksPerHour;

(在 Noda Time 2.0 中,Duration 有一个 TotalHours 属性 使这更容易。那将 return 一个 double 值,而这里 [由于操作数的类型,=14=] 是 long。请注意,如果时区有(比如)半小时的转换,它可能会丢失信息。)