Строка ISO 8601 в C# datetime: потерян часовой пояс - PullRequest
1 голос
/ 09 февраля 2020

в базе данных, у меня есть столбец с типом данных Date. Я использую ORM для сопоставления этой БД, поэтому в соответствующем классе C# у меня есть поле с типом данных DateTime. От FHIR-клиента я получаю документ JSON с датой, отформатированной в ISO 8601 и содержащей часовой пояс. когда я использую преобразование из строки в DateTime, я теряю часовой пояс, а в базе данных я сохраняю дату без часового пояса. Когда FHIR-клиент запрашивает у меня данные, которые он мне уже отправил, я читаю БД и, конечно же, возвращаю исходную дату, но (!!!) без часового пояса.

Есть ли какой-нибудь обходной путь для сохранить часовой пояс из исходного запроса FHIR?
Я не могу изменить существующую базу данных, потому что это устаревший старый проект и использовал множество этих таблиц и т. д. c.

1 Ответ

1 голос
/ 11 февраля 2020

Тип FHIR - это смещение, а не часовой пояс.

Так что, по сути, если у вас нет возможности сохранить смещение в базе данных, вам необходимо сделать предположение о том, что это значение внутри, и сделайте так, чтобы ваш код обрабатывал это, добавляя значение смещения, когда это необходимо. Типы только даты в клиенте FHIR не нуждаются во времени (или зоне) для них, но я предполагаю, что вы ссылаетесь на свойства datetime fhir.

Существуют некоторые методы расширения для DateTime и DateTimeOffset c# классы, которые могут помочь вам с кодированием этих предположений в (.ToFhirDate () и .ToFhirDateTime (offset))

https://github.com/FirelyTeam/fhir-net-api/blob/355c8ece1bdc81cd6354dd7c7f01381a5d99725d/src/Hl7.Fhir.Core/Support/DateExtensions.cs#L32

Принудительно все значения для UT C - это один из методов, но если ваша база данных не ожидает этого, то вы еще больше запутаете вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...