我正在编写一个测试应用程序来重现一些数据编写方案 - 每小时运行一次的任务。
为此,我需要知道它将执行多少次 - 给定的数小时天。我试图这样做:
Period.Between(localDateTimeStart.Date, localDateTimeStart.Date.PlusDays(1), PeriodUnits.Hours)
但它给了我{名} Units contains time units: Hours
的ArgumentException。在NodaTime中这样做的惯用方法是什么?或者我的方法是错的?
答案 0 :(得分: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;
(在Noda Time 2.0中,Duration
有一个TotalHours
属性使这更容易。这将返回double
值,而此处hours
是long
由于操作数的类型。请注意,如果时区有(例如)半小时的转换,它可能会丢失信息。)