Как узнать количество часов в сутках в NodaTime?

Я пишу тестовое приложение, чтобы воспроизвести некоторый сценарий записи данных — задачу, которая выполняется каждый час.
Для этой цели мне нужно знать, сколько раз она будет выполняться — сколько часов в данный день. Я пытался сделать это следующим образом:
Period.Between(localDateTimeStart.Date, localDateTimeStart.Date.PlusDays(1), PeriodUnits.Hours)
но это дает мне исключение ArgumentException, говорящее Units contains time units: Hours. Каким идиоматичным способом сделать это в NodaTime? Или мой подход неверен?


person chester89    schedule 21.08.2015    source источник


Ответы (1)


Между двумя местными значениями даты и времени всегда будет 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 из-за типов операндов. Имейте в виду, что может быть потеряна информация, если часовой пояс имеет переход (скажем) полчаса.)

person Jon Skeet    schedule 22.08.2015
comment
благодарю за разъяснение. так что, если я попаду в день, когда переход не был целым числом часов, я просто использую свойства TicksPerMinute/Second? - person chester89; 23.08.2015
comment
@chester: Да, вы могли бы - на самом деле это зависит от того, что вы хотите сделать. - person Jon Skeet; 23.08.2015