Как преобразовать UTC DateTimeOffset в DateTime, который использует системный часовой пояс
Quartz.net предлагает метод для получения следующего события следующего триггера: http://quartznet.sourceforge.net/apidoc/1.0/html/html/cc03bb79-c0c4-6d84-3d05-a17f59727c98.htm
Документы утверждают, что этот Trigger.GetNextFireTimeUtc()
возвращает DateTime?
но он фактически возвращает DateTimeOffset?
, Я действительно не понимаю, для чего используется DateTimeOffset
или почему эта функция возвращает один вместо обычного DateTime
. Все, что я хочу, это следующий раз, когда триггер начнет работать, но в моем часовом поясе.
Я сделал этот trigger.GetNextFireTimeUtc().Value.DateTime
но он дал мне время на 2 часа раньше, то есть время UTC. Как я могу получить правильное время в соответствии с моим компьютером?
Ответы
Ответ 1
Вы можете просто использовать свойство DateTimeOffset.LocalDateTime
:
trigger.GetNextFireTimeUtc().Value.LocalDateTime
Из документации:
Если необходимо, свойство LocalDateTime преобразует текущую дату и время объекта DateTimeOffset в локальную системную дату и время. Преобразование является двухступенчатой:
- Свойство преобразует текущее время объекта DateTimeOffset в координированное универсальное время (UTC).
- Затем свойство преобразует UTC в локальное время.
Вы действительно должны изучить DateTimeOffset
хотя это важный тип, чтобы понять, используете ли вы BCL для работы с датой/временем.
Ответ 2
Этот код предназначен для преобразования utc в локальный
var local = utc.ToLocalTime();