【发布时间】:2019-08-21 21:29:08
【问题描述】:
FHIR 服务器和 FHIR 客户端在欧盟环境中工作,区域设置为“en-GB”。 两者都使用 Firely 团队的 Hl7-R4 .NET 版本。
如果我将患者的出生日期设置为 patientJson.BirthDate = "25-12-1970",然后将请求发送到 FHIR 服务器,我会收到异常:
"'Partial is in an invalid format, should use ISO8601 YYYY-MM-DDThh:mm:ss+TZ notation'. (at Patient.birthDate[0])".
但如果我设置patientJson.BirthDate = "1970-12-25" 一切正常。
我不能指望客户(大多数来自欧盟)会记得在发送到 fhir 服务器之前转换为美国格式的日期。
如何为 HL7 序列化程序设置正确的格式(例如“en-GB”)?
试图将其添加到 Startup.cs
public virtual void Configure(IApplicationBuilder app)
{
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("en-GB"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-GB"),
// Formatting numbers, dates, etc.
SupportedCultures = supportedCultures,
// UI strings that we have localized.
SupportedUICultures = supportedCultures
});
没用 我用谷歌搜索了this code
public static PartialDateTime Parse(string value)
{
try
{
var dummy = XmlConvert.ToDateTimeOffset(value);
}
catch
{
throw new FormatException("Partial is in an invalid format, should use ISO8601 YYYY-MM-DDThh:mm:ss+TZ notation");
}
但是这段代码并不意味着它不能被设置为使用类似“dd-mm-yyyy”的东西来进行序列化/反序列化。
【问题讨论】:
-
HL7 格式可能是 XML,您必须满足架构要求。如果您使用的是字符串日期,则不能从 US 更改为 GB。您必须满足 SCHEMA 要求。如果您的客户使用的是架构,那么一切都应该没问题。
-
计算机之间的数据传输应始终采用标准 ISO 格式。服务器永远不会有问题。服务器将始终获得 ISO 格式。客户端应始终将类存储为 DateTime 对象和serialize 方法应采用 DateTime 对象并序列化为 ISO,而反序列化方法应采用 ISO 并生成 DateTime 对象。您唯一的问题是在客户端,用户需要将字符串日期解析为 DateTime 对象。仅在以下情况下才会发生错误用户正在将字符串解析为 DateTime。如果用户将 PC 设置为本地文化,则不会有任何问题