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

che*_*r89 1 .net nodatime

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

Jon*_*eet 5

在两个本地日期/时间值之间,总会有24小时.听起来你对特定区域的日期感兴趣,在这种情况下你想要:

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

(在Noda Time 2.0中,Duration有一个TotalHours属性使这更容易.这将返回一个double值,而这hourslong由于操作数的类型.请注意,如果时区有(例如)一半的转换,它可能会丢失信息一小时.)