【问题标题】:Patient.BirthDate. en-GB 'Partial is in an invalid format, should use ISO8601'患者.出生日期。 en-GB '部分格式无效,应使用 ISO8601'
【发布时间】: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 设置为本地文化,则不会有任何问题

标签: c# hl7 hl7-fhir


【解决方案1】:

YYYY-MM-DD 不是特定国家/地区的格式。它旨在成为一种通用格式,无论语言环境如何,都必须使用它。我不知道为什么patientJson.BirthDate = "12-25-1970" 没有为你失败。这当然是无效的。所有日期时间,无论是 XML、JSON 还是 RDF,都必须遵守 YYYY-MM-DD 语法。

【讨论】:

  • 当然,你在真实代码中是正确的“1970-12-25”,我在创建帖子时犯了一个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多