如何处理非标准的Json日期

时间:2018-01-21 12:36:32

标签: c# json sql-server

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

2018-01-20T13:42:43.1040000Z

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

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

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

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

1 个答案:

答案 0 :(得分:3)

您可以设置DateFormatString对象的JsonSerializerSettings来自定义日期格式。但是,由于您还有一个特殊的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);