DD.WellWorkover.Cloud/AsbCloudWebApi/Docs/about using DateTime[Offset].md

1.8 KiB
Raw Blame History

Проблема

Скважины и пользователи ЕЦП расположены на различных часовых поясах. В БД время хранится только в UTC. На страницах ЕЦП время везде должно отображаться в часовом поясе скважины. Web Api должен понимать при обращении время как в UTC 2021-12-29T07:00:00Z, так и с указанием часового пояса 2021-12-29T12:00:00+05.

Решение

В БД уже хранится часовой пояс скважины в таблице телеметрии. На стороне backEnd публичные методы контроллеров и методы сервисов, которые вызываются из контроллеров должны понимать параметры времени как тип DateTime, затем приводить его к UTC. Если DateTime.Kind == unspecified, то считается что это время указанное в часовом поясе скважины. При переходе на DateTimeOffset флаги isUTC не нужны Даты в Model - используют DateTimeOffset. Даты в Dto - используют DateTime без указания часового пояса во времени скважины. При получении Dto от фронта с kind == unspecified дата приводится к UTC как будто она в часовом поясе скважины. Перед отправкой клиенту в Dto все даты приводятся к часовому поясу скважины и kind устанавливается как unspecified.