【问题标题】:How to handle non-standard Json dates如何处理非标准 Json 日期
【发布时间】:2018-01-21 23:03:52
【问题描述】:

我们有一个由客户端填充的 SQL 数据表,供后台服务稍后处理。这在大多数情况下都有效,但似乎某些客户端子集向我们发送了意外的日期格式,这导致 JSON 解析错误。我们期待以下格式的日期:

2018-01-20T13:42:43.1040000Z

但我们从这些客户那里得到的是:

2018-01-20T3:42:43.1040000 p. m.Z

一等奖将是找到一个知道如何正确转换这些日期字符串的标准 JSON 解析器或格式字符串。二等奖是为 SQL 编写一个更新脚本,将这些字符串转换为可用的东西。否则,我们将编写脚本将这些日期解析为字符串,然后对它们进行处理,直到它们有效为止,这很讨厌。

任何人都知道任何标准解析器,或者可以建议一个能够正确解释这些奇怪的日期字符串的日期格式字符串?

【问题讨论】:

  • 您想创建一个自定义字符串转换器。说明是here
  • 这个日期是什么文化? AM/PM 说明符是奇数。
  • @DavidG 发送此格式的客户在墨西哥

标签: c# json sql-server


【解决方案1】:

您可以设置JsonSerializerSettings 对象的DateFormatString 来自定义日期格式。但是,由于您还有一个特殊的 AM/PM 指示符,因此您还需要设置文化。您可以创建自己的,但出于这些目的,我们可以从加泰罗尼亚文化中窃取,因为这似乎是匹配的。鉴于此,我们可以使用这样的格式字符串(请参阅here 以了解每个部分的含义):

yyyy-MM-dd'T'h:m:s.fffffff tt'Z'

例如,这应该可以工作。

var catalan = System.Globalization.CultureInfo.CreateSpecificCulture("ca-FR");

JsonSerializerSettings settings = new JsonSerializerSettings
{
    DateFormatString = "yyyy-MM-dd'T'h:m:s.fffffff tt'Z'",
    Culture = catalan
};

var result = JsonConvert.DeserializeObject<YourObject>(json, settings);

【讨论】:

  • 这不是意味着您希望所有日期都采用这种格式吗?
  • @Crowcoder 是的,但我假设 OP 将能够确定他的哪些客户正在发送这种格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多