【问题标题】:Parsing a JSON date into a C# DateTime将 JSON 日期解析为 C# DateTime
【发布时间】:2020-05-03 02:44:45
【问题描述】:

我有一个从 targetProcess 获取信息并将该信息放入 sql 表中的 API。

当 targetProcess 字段为日期时出现问题,因为我将它作为 json date "/Date(1409202000000-0500 )/" 接收。

如何在 c# 中将此 json 日期转换为 Datetime?

我一直在尝试在 StackOverflow Post 中添加额外的引号,例如 asnwer,但它不起作用。

我尝试在

中替换仅使用 1409202000000-0500 的单词 Date
DateTime dotNetDate = new DateTime(1970, 1, 1);
dotNetDate = dotNetDate.AddMilliseconds(Convert.ToInt64(1409202000000-0500) 

我也使用 JSON.NET,如下所示

string sa = "/Date(1409202000000-0500 )/"
DateTime dt = new DateTime();
dt = JsonConvert.DeserializeObject<DateTime>(sa);

但它也不起作用,

所以问题是....如何在 c# 中将此 json 日期转换为 Datetime?

【问题讨论】:

标签: c# json datetime


【解决方案1】:

您需要手动将字符串“以编程方式”用引号括起来,以确保其格式正确:

string sa = @"""" + "/Date(1409202000000-0500 )/" + @"""";
DateTime dt = JsonConvert.DeserializeObject<DateTime>(sa);

如果您需要多次调用它(看起来确实如此),只需将包装职责移至方法:

public string WrapStringInQuotes(string input)
{
    return @"""" + input + @"""";
}

【讨论】:

  • 赞成,这是来自 cmets 的 @dbc 的一个分支,dotnetfiddle.net/Z9ABCx
  • 如果您可以访问较新版本的 C#,您可以简化为,var dateTime = @"""/Date(1573074780000-0500)/"""; 我仍然很困惑为什么没有添加引号默认转换不起作用。
【解决方案2】:

问题在于您的日期字符串。 而不是

string sa = "/Date(1409202000000-0500 )/"

试试

string sa = @"""/Date(1409202000000-0500)/""";

更改您的代码:

 string sa = @"""/Date(1409202000000-0500)/""";
            DateTime dt = new DateTime();
            dt = JsonConvert.DeserializeObject<DateTime>(sa);
            // dt = "2014-08-28 3.00.00 PM"

【讨论】:

  • 谢谢!我解决了写字符串 sa = "/Date(1409202000000-0500)/"; sa2 = @"""" + sa2 + @"""";
【解决方案3】:

这里有我的功能。甚至有可能您可以获得更短的 Json 日期数字,例如 OpenweatherAPI 中的日出和日落,然后在这种情况下您需要乘以 1000。我的函数处理这两种情况。

    public static DateTime GetDateTimeFromJSON(long jsonDateTime, bool shorter = false)
    {
        return JsonConvert.DeserializeObject<DateTime>($"\"\\/Date({ (shorter ? jsonDateTime * 1000 : jsonDateTime) })\\/\"", new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
        }).ToLocalTime();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多