我有从传入的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'被识别为无效 日期时间。
我在做什么错?我该如何解决?
答案 0 :(得分:12)
我看到两件事;
d
specifier而不是dd
指示符,因为您的一位数字天数不是有leading zero。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);
答案 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");