【问题标题】:How to parse a string with many dates into a List<DateTme>?如何将具有多个日期的字符串解析为 List<DateTime>?
【发布时间】:2019-12-20 10:44:17
【问题描述】:

我有一个看起来像这样的string[12-20-2019 11:27:57, 12-20-2019 11:27:58, 12-20-2019 11:27:59] 每个日期都由 , 分隔,如何将其解析为 List&lt;DateTime&gt;

我的代码是:

string datesListString = JObject.Parse(jsonContent)["datesList"].ToString();
ListDateTime> datesList = new JavaScriptSerializer().Deserialize<List<DateTime>>(datesListString);

DatesListString 是我需要反序列化的大型 JSON 文件的字段。

【问题讨论】:

  • 需要先将字符串拆分,得到一个字符串序列,然后再通过DateTime.Parse方法将每个字符串映射到一个DateTime实例(docs.microsoft.com/en-us/dotnet/api/…)
  • 你的代码在哪里!到目前为止,您尝试过什么?
  • 我对初始字符串有疑问:它是否包含方括号?了解确切的字符串格式(我的意思是它是否包含括号以及分隔符是什么)非常重要,以便能够拆分字符串并将获得的子字符串解析为 DateTime 的实例
  • 是的,它有括号

标签: c# json list datetime


【解决方案1】:
string yourString = "[12-20-2019 11:27:57, 12-20-2019 11:27:58, 12-20-2019 11:27:59]";    
List<DateTime> dates = yourstring
    .Trim('[', ']')
    .Split(new[] { ", " }, StringSplitOptions.None)
    .Select(s => DateTime.ParseExact(s, "MM-dd-yyyy hh:mm:ss", null))
    .ToList();

【讨论】:

  • 无法在.Split(", ")上从“字符串”转换为“字符”
  • @andreauttini 我已经更新了我的答案;包括StringSplitOptions 在内的重载版本需要在字符串而不是字符上进行拆分。
【解决方案2】:

您可以通过结合string.Split 方法和Select from System.Linq 来做到这一点

var dateString = "12-20-2019 11:27:57, 12-20-2019 11:27:58, 12-20-2019 11:27:59";
var result = dateString.Split(',').Select(d => DateTime.Parse(d, CultureInfo.InvariantCulture));

要跳过方括号,您可以简单地使用Trim 方法,就像那样

var dateString = "[12-20-2019 11:27:57, 12-20-2019 11:27:58, 12-20-2019 11:27:59]".Trim('[', ']');

【讨论】:

    【解决方案3】:

    你可以试试:

    string dateTimes = "12-20-2019 11:27:57, 12-20-2019 11:27:58, 12-20-2019 11:27:59";
    string[] splitDateTime = dateTimes.Split(',');
    List<DateTime> dates = new List<DateTime>();
    foreach (string dateTime in splitDateTime)
    {
        DateTime date;
        if (DateTime.TryParseExact(dateTime, "MM-dd-yyyy hh:mm:ss", 
                                   CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
          dates.Add(date);
    }
    

    【讨论】:

      【解决方案4】:

      需要先拆分字符串,然后可以使用DateTime.Parse(str)获取DateTime对象。

      这证明了它:

      using System;
      
      public class Program
      {
          public static void Main()
          {
              string str = "[12-20-2019 11:27:57, 12-20-2019 11:27:58, 12-20-2019 11:27:59]";
              str = str.Substring(1, str.Length - 2);
              string[] parts = str.Split(',');
      
              foreach(var part in parts) {
                  str = str.Trim();
                  var date = DateTime.Parse(part);
                  Console.WriteLine(date);
              }
          }
      }
      

      【讨论】:

      • 小心使用 DateTime.Parse,千万不要在没有文化或格式的情况下使用它!
      【解决方案5】:

      看起来是 JSON:

      var _str = @"[""12-20-2019 11:27:57"", ""12-20-2019 11:27:58"", ""12-20-2019   11:27:59""]";
      

      所以我们可以使用using Newtonsoft.Json;:

      using Newtonsoft.Json;
      
      var list = JsonConvert.DeserializeObject<List<string>>(_str)
          .Select(s => DateTime.Parse(s, CultureInfo.InvariantCulture));
      

      Read mode about library Json.NET

      【讨论】:

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