C# 病人,生日。欧洲标准GB';部分格式无效,应使用ISO8601';
FHIR服务器和FHIR客户端在EU环境中工作,语言环境为“en GB”。 两者都使用Firely团队的Hl7-R4.NET版本 如果我将患者的出生日期设置为类似的C# 病人,生日。欧洲标准GB';部分格式无效,应使用ISO8601';,c#,hl7,hl7-fhir,C#,Hl7,Hl7 Fhir,FHIR服务器和FHIR客户端在EU环境中工作,语言环境为“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.birthDa
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
});
这没用
我在谷歌上搜索过
但这段代码并不意味着不能将其设置为使用类似“dd-mm-yyyy”的内容进行序列化/反序列化。yyy-mm-dd不是特定于国家/地区的格式。它是一种通用格式,无论语言环境如何,都必须使用。我不知道为什么
patientJson.BirthDate=“12-25-1970”
对你来说没有失败。这肯定是无效的。所有日期时间,无论是XML、JSON还是RDF,都必须遵循YYYY-MM-DD语法。HL7格式可能是XML,并且必须满足模式要求。如果您使用的是字符串日期,则不能从US更改为GB。您必须满足架构要求。如果您的客户正在使用架构,则一切都应该正常。计算机之间的数据传输应始终采用标准ISO格式。服务器上不应出现问题。服务器将始终采用ISO格式。客户端应始终将类存储为DateTime对象,序列化方法应采用DateTime对象和序列化为ISO和反序列化方法应采用ISO并生成DateTime对象。您唯一的问题是在客户端,用户需要将字符串日期解析为DateTime对象。只有在用户将字符串解析为DateTime时才会发生错误。如果用户将PC设置为本地区域性,则不会出现任何问题,您是对的“1970-12-25”在真实代码中,我在创建帖子时犯了一个错误。
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");
}