从字符串C#解析DateTime

A. *_*kiy 4 c# datetime

我有从传入的API调用中得到的日期: Wed, 6 Mar 2019 14:39:49 +0300

我需要将此字符串解析为DateTime。为此,我使用以下代码:

DateTime.ParseExact("Wed, 6 Mar 2019 14:39:49 +0300", 
                     new string[] { "ddd, dd MMM yyyy HH:mm:ss zzzz" },
                     CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
Run Code Online (Sandbox Code Playgroud)

但是结果是我有错误:

字符串'Wed,6 Mar 2019 14:39:49 +0300'未被识别为有效的DateTime。

我究竟做错了什么?我该如何解决?

Son*_*nül 12

我看到两件事;

  1. 您应该使用d代替dd符,因为你的个位数的日数也不能前导零
  2. 没有zzzz自定义格式说明符。您应该改为使用zzz说明符

DateTime.ParseExact("Wed, 6 Mar 2019 14:39:49 +0300", 
                     new string[] { "ddd, d MMM yyyy HH:mm:ss zzz" },
                     CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
Run Code Online (Sandbox Code Playgroud)

但老实说,如果您的字符串具有UTC偏移值,我建议将其解析为DateTimeOffset一个DateTime实例,因为该实例不具有偏移部分,并且zzz不建议使用说明符,如MSDN上所述。

使用DateTime值时,“ zzz”自定义格式说明符表示本地操作系统时区与UTC的带符号偏移,以小时和分钟为单位。它不反映实例DateTime.Kind属性的值。因此,不建议将“ zzz”格式说明符与DateTime值一起使用。

为了解析DateTimeOffset

DateTimeOffset.ParseExact("Wed, 6 Mar 2019 14:39:49 +0300", 
                           new string[] { "ddd, d MMM yyyy HH:mm:ss zzz" },
                           CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
Run Code Online (Sandbox Code Playgroud)

现在,您可以根据需要分别使用它的.DateTime和/或.Offset属性。