【发布时间】:2020-02-09 09:06:53
【问题描述】:
在数据库中,我有一列数据类型为Date。
我使用 ORM 来映射这个 DB,因此,在适当的 C# 类中,我有一个 DateTime 数据类型的字段。
从 FHIR 客户端,我收到一个 JSON 文档,其日期格式为 ISO 8601,其中包含时区。
当我使用从字符串到 DateTime 的转换时,我丢失了一个时区,并且在数据库中,我存储了一个没有时区的日期。
当 FHIR 客户端向我询问它已经发送给我的一些数据时,我读取了数据库,当然,返回原始日期但是(!!!)没有时区。
是否有任何解决方法可以存储原始 FHIR 请求中的时区?
我无法修改现有数据库,因为它是一个成熟的旧项目并且使用了很多这些表等。
【问题讨论】:
-
时区真的有必要吗?您的客户可以改为接受 UTC 吗?
-
请提供更多详细信息 - 您使用的是什么数据库?数据库中的字段类型是什么?请注意,
DateTime不包含偏移量 - 您是否尝试过使用DateTimeOffset? (还值得注意的是,尽管在 ISO-8601 中进行了命名,但 ISO-8601 中没有实际包含时区标识符的格式 - 只有一个 UTC 偏移量。不幸的是,该标准混淆了两者。)但从根本上说,如果你将数据重新存储在不包含偏移量的数据库字段中,原始信息就消失了。 -
不幸的是,无法从
DateTime获取时区。 '因为Datetime不存储时区信息。 -
如果您的数据库不支持使用
DateTime类型的列存储时区,您有两种选择。 1)将您的 TimeZone 存储在另一列中,主列以 UTC 存储数据 2)将DateTime存储在字符串中。 -
Oracle 数据库,列“IDENTIFIER_PERIOD_START”类型:DATE,“IDENTIFIER_PERIOD_END”类型:DATE 等
标签: c# datetime timezone iso8601 hl7-fhir