如何在 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
。请注意,如果时区有(比如)半小时的转换,它可能会丢失信息。)
我正在编写一个测试应用程序来重现一些数据写入场景 - 一个每小时运行的任务。
为此,我需要知道它将执行多少次 - 有多少小时在给定的一天。我试着这样做: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
。请注意,如果时区有(比如)半小时的转换,它可能会丢失信息。)