ISO 8601字符串到C#日期时间:丢失的时区

问题描述 投票:0回答:1

在数据库中,我有一列的数据类型为Date。我使用ORM映射此数据库,因此,在适当的C#类中,我具有一个具有DateTime数据类型的字段。从FHIR客户端收到一个JSON文档,其日期格式为ISO 8601,其中包含时区。当我使用从字符串到DateTime的转换时,我失去了一个时区,并且在数据库中,我存储了一个没有时区的日期。当FHIR客户端要求我提供一些已经发送给我的数据时,我读取了数据库,当然返回了原始日期,但是(!!!)没有时区。

是否有任何解决方法可以存储原始FHIR请求中的时区?我无法修改现有数据库,因为它是一个成熟的旧项目,并且使用了很多这些表等。

c# datetime timezone iso8601 hl7-fhir
1个回答
0
投票

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

将所有值都强制为UTC是一种方法,但是如果您的数据库不期望那样,那么您将进一步使事情变得混乱。

© www.soinside.com 2019 - 2024. All rights reserved.