从字符串C#解析DateTime

时间:2019-03-06 14:11:25

标签: 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);

但是结果是我有错误:

  

字符串'Wed,6 Mar 2019 14:39:49 +0300'被识别为无效   日期时间。

我在做什么错?我该如何解决?

7 个答案:

答案 0 :(得分:12)

我看到两件事;

  1. 您应该使用d specifier而不是dd指示符,因为您的一位数字天数不是leading zero
  2. 没有zzzz作为自定义格式说明符。您应该改用zzz specifier

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

但是,老实说,如果您的字符串具有一个UTC Offset值,我建议将其解析为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);

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

答案 1 :(得分:1)

将“ ddd,dd MMM yyyy HH:mm:ss zzzz”更改为“ ddd,d MMM yyyy HH:mm:ss zzzz”

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

答案 2 :(得分:1)

您可能正在寻找

DateTime myDate = DateTime.ParseExact("Wed, 6 Mar 2019 14:39:49 +0300",
                                      "ddd, d MMM yyyy HH:mm:ss zzz",
                                      CultureInfo.InvariantCulture, 
                                      DateTimeStyles.AdjustToUniversal);

引用:https://stackoverflow.com/a/10426999/4373895这对您也有帮助。谢谢。

答案 3 :(得分:1)

Datetime.ParseExact函数就像下面的代码可以帮助您。需要更改的一件事是使用d MMM yyyy代替dd MMM yyyy。

DateTime.ParseExact("Wed, 6 Mar 2019 14:39:49 +0300", "ddd, d MMM yyyy HH:mm:ss zzz", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

答案 4 :(得分:1)

d MMM yyyy而不是ddd MMM yyyy

/** \brief Auxiliary class to represent the edge cut. (output structure) */
    template< class VIter, class EIter > struct OutCut
    {
        VIter vertIter;/**<\brief Insert iterator  to the container with vertexes (accessible from starting vertex after the cut)*/
        EIter edgeIter;/**<\brief Insert iterator to the container with edges of the cat.*/
        /**\brief Constructor*/
        OutCut( VIter av, EIter ei ): vertIter( av ), edgeIter( ei ) { }
    };

/**\brief Generating function for the OutCut object.
 *
 *  \tparam VIter the type of insert iterator to container with vertices.
 *  \tparam EIter the type of insert iterator to container with edges.
 *  \param av the insert iterator to container with vertices.
 *  \tparam ei the insert iterator to container with edges.
 *
 *  [See example](examples/flow/example_Flow.html). */
template< class VIter, class EIter > static OutCut< VIter,EIter > outCut( VIter av, EIter ei )
    { return OutCut< VIter,EIter >( av,ei ); }

答案 5 :(得分:0)

UTC偏移量的格式为zzz而不是zzzz,并且期望它的冒号(:)将小时与分钟(例如+03:00)分开)。和dd一样,它表示月份的前零天,但是您表示月份的数字是一位。在这种情况下,请使用d

答案 6 :(得分:0)

DateTime time = Convert.ToDateTime("Wed, 6 Mar 2019 14:39:49 +0300");
string ti = time.ToString(@"ddd, dd MMM yyyy HH:mm:ss zzzz");