forked from ddrilling/AsbCloudServer
35 lines
2.1 KiB
Markdown
35 lines
2.1 KiB
Markdown
|
## Проблема
|
|||
|
Скважины и пользователи ЕЦП расположены на различных часовых поясах.
|
|||
|
В БД время хранится только в UTC.
|
|||
|
На страницах ЕЦП время везде должно отображаться в часовом поясе скважины.
|
|||
|
Web Api должен понимать при обращении время как в UTC `2021-12-29T07:00:00Z`, так и с указанием часового пояса `2021-12-29T12:00:00Z5`.
|
|||
|
|
|||
|
## Решение
|
|||
|
В БД уже хранится часовой пояс скважины в таблице телеметрии.
|
|||
|
На стороне backEnd публичные методы контроллеров и методы сервисов, которые вызываются из контроллеров должны понимать параметры времени как тип DateTime, затем приводить его к UTC.
|
|||
|
Если DateTime.Kind == unspecified, то считается что это время указанное в часовом поясе скважины.
|
|||
|
При переходе на DateTimeOffset флаги isUTC не нужны
|
|||
|
Даты в Model - используют DateTimeOffset.
|
|||
|
Даты в Dto - используют DateTime без указания часового пояса во времени скважины.
|
|||
|
При получении Dto от фронта с kind == unspecified дата приводится к UTC как будто она в часовом поясе скважины.
|
|||
|
Перед отправкой клиенту в Dto все даты приводятся к часовому поясу скважины и kind устанавливается как unspecified.
|
|||
|
|
|||
|
## Affected
|
|||
|
ReportController
|
|||
|
.CreateReportAsync
|
|||
|
.GetReportSizeAsync
|
|||
|
.GetReportsDateRangeAsync
|
|||
|
|
|||
|
TelemetryDataBaseController
|
|||
|
.GetDataAsync
|
|||
|
.GetDataDatesRangeAsync
|
|||
|
|
|||
|
MessageController
|
|||
|
.GetMessagesAsync
|
|||
|
.GetMessagesDateRangeAsync
|
|||
|
|
|||
|
WellOperationController
|
|||
|
.GetOperationsAsync
|
|||
|
.InsertRangeAsync
|
|||
|
.UpdateAsync
|