Я пишу тестовое приложение, чтобы воспроизвести некоторый сценарий записи данных — задачу, которая выполняется каждый час.
Для этой цели мне нужно знать, сколько раз она будет выполняться — сколько часов в данный день. Я пытался сделать это следующим образом: Period.Between(localDateTimeStart.Date, localDateTimeStart.Date.PlusDays(1), PeriodUnits.Hours)
но это дает мне исключение ArgumentException, говорящее Units contains time units: Hours
. Каким идиоматичным способом сделать это в NodaTime? Или мой подход неверен?
Как узнать количество часов в сутках в NodaTime?
Ответы (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
благодарю за разъяснение. так что, если я попаду в день, когда переход не был целым числом часов, я просто использую свойства TicksPerMinute/Second?
- person chester89; 23.08.2015
@chester: Да, вы могли бы - на самом деле это зависит от того, что вы хотите сделать.
- person Jon Skeet; 23.08.2015