【问题标题】:Parsing custom format to DateTime将自定义格式解析为 DateTime
【发布时间】:2013-11-01 21:36:37
【问题描述】:

我正在尝试将字符串转换为 DateTime。代码如下:

DateTime.Parse("20131101T210705.282Z").ToShortTimeString()

我收到格式异常。

我尝试提供以下格式“yyyyMMddTssmmhh.fffz”,但收到相同的异常。代码如下

DateTime dt;
if (DateTime.TryParseExact("20131101T210705.282Z",
                           "yyyyMMddTssmmhh.fffz",
                          new CultureInfo("en-US"),
                          DateTimeStyles.None,
                          out dt))
    return dt.ToShortTimeString();

在这种情况下,代码不会解析字符串。

【问题讨论】:

    标签: c# parsing datetime


    【解决方案1】:

    试试这个:

     DateTime dt;
        if (DateTime.TryParseExact("20131101T210705.282Z",
                                   "yyyyMMddTssmmhh.fffZ",
                                  new CultureInfo("en-US"),
                                  DateTimeStyles.None,
                                  out dt))
            return dt.ToShortDateString() + " " + dt.ToShortTimeString();
    

    【讨论】:

    • 你试过这个代码吗?我可以看到我们的 TryParseExact () 参数完全相同,这意味着条件是否会失败。
    • 我觉得您为 TryParseExact() 提供的格式错误为 -> 20131101T210705.282Z != yyyyMMddTssmmhh.fffz
    • 是的,我正在为格式而苦苦挣扎。我使用 MSDN 上提供的图表制作的。正确的格式是什么?
    【解决方案2】:

    这可能是一种解析方式。

       var timeStamp = "20131101T210705.282Z";
       var datetime = timeStamp.Split(new[] { 'T' ,'.'});
       DateTime dt1;
    
    
      if (DateTime.TryParseExact(datetime[0],
                         new string[] { "yyyyMMdd" },
                        new CultureInfo("en-US"),
                        DateTimeStyles.None,
                        out dt1))
      {
        Console.WriteLine(dt1.ToShortDateString());
      }
    
      DateTime dt2;
    
    
      if (DateTime.TryParseExact(datetime[1],
                         new string[] { "ssmmhh" },
                        new CultureInfo("en-US"),
                        DateTimeStyles.None,
                        out dt2))
      {
        Console.WriteLine(dt2.ToShortTimeString());
      }
    
      Console.WriteLine(dt1.ToShortDateString() + " " + dt2.ToShortTimeString());
      Console.ReadLine();
    

    【讨论】:

    • 这段代码的问题是无法识别时间是上午还是下午。
    【解决方案3】:

    格式完全不正确。由于所有值(小时、分钟和秒)都小于 24,因此给出的时间戳值没有清楚地指示小时的位置。以下代码可以正常工作。

    DateTime.TryParseExact(value,
                           "yyyyMMddTHHmmss.fffZ",
                           CultureInfo.InvariantCulture,
                           DateTimeStyles.None,
                           out dt)
    

    鉴于这种专有格式,小时数采用 24 小时格式并排在第一位。今天早上的测试产生了以下值:20131106T162733.032Z。我能够测试这种专有格式,因为我们为同一家公司工作。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多