Вызывает ли летнее время расчеты DateTime, чтобы стать отрицательными - PullRequest
2 голосов
/ 04 августа 2011

В настоящее время мы переписываем основную часть наших услуг, в основном у нас есть запланированные задачи, которые могут выполняться с интервалами, датами, определенным временем и т. Д. И т. Д. И т. П.

В настоящее время мы задаемся вопросом, может ли переход на летнее время вызвать у нас проблемы, в основном мы рассчитываем следующее возможное время выполнения, исходя из того, в какие дни должно выполняться задание, а также между тем временем и интервалом. Мы делаем это, беря текущее время и добавляя дни / минуты / часы к этому DateTime.

Затем мы берем это новое время выполнения и вычитаем DateTime.Now из этого DateTime, оставляя нам промежуток времени до следующего запуска.

Как бы то ни было, что если текущее время 01:50 в день перехода на летнее время, мы добавляем 20 минут, что является нашим установленным интервалом, и в итоге получаем время 02:10, как бы это ни было, если это дневное освещение. на самом деле 01: 10.

Когда я вычитаю текущее время (01:50) из 01:10 (которое фактически является 02:10), это возвращает отрицательное значение, которое мне нужно обойти, или это никогда не возвращает отрицательное значение, потому что DateTime это просто длинная нижняя часть с правильной информацией?

По сути, следующий код, проверка нужна или нет?

//Get interval between nextrun and right now!
double interval = (NextRun - DateTime.Now).TotalMilliseconds;

//Check if interval is ever less or equal to 0, should never happen but maybe with daylight saving time?
if(interval <= 0)
{
    //Set default value
    interval = IntervalInMilliseconds;
}

Мы считаем, что эта проверка не нужна, но наш поиск в Google до сих пор не дал нам убедительного ответа.

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Используйте DateTime.UtcNow вместо DateTime.Now ВЕЗДЕ

0 голосов
/ 31 октября 2016

Прежде всего, вы можете попробовать это сами, так как это поможет вам понять, как это работает.

По сути, используя ваш пример выше, если у вас есть 20 минут по местному времени, это будет 2:10, а не 1:10, поскольку вычисление выполняется по местному времени. Если вы хотите получить 1:10, вам нужно преобразовать местное время в универсальное время, добавить 20 минут и затем преобразовать обратно в местное время.

Если вам нужно реальное прошедшее время, то вам нужно преобразовать время в универсальное время, прежде чем вычислять разницу во времени. Кроме того, если вы работаете по местному времени, вы не сможете различить неоднозначное время, когда часы вернутся назад.

...