将字符串“2017-01-01T12:00:33:123456Z+02”转换为 DateTime [重复]
Posted
技术标签:
【中文标题】将字符串“2017-01-01T12:00:33:123456Z+02”转换为 DateTime [重复]【英文标题】:Convert string "2017-01-01T12:00:33:123456Z+02" to DateTime [duplicate] 【发布时间】:2016-08-03 00:38:03 【问题描述】:我正在尝试将我从客户那里获得的这个字符串转换为日期时间,以将其存储在我的数据库中。
我尝试了几种方法,但似乎没有任何效果。 我需要 UTC 时间的偏移量,所以我想我需要对 zz 做点什么。
这是有效的:
string test = "2008-06-11T16:11:20.0904778Z";
DateTime publishingTimeStamp = DateTime.ParseExact(test, "o", CultureInfo.InvariantCulture,
DateTimeStyles.None);
但客户的字符串略有不同,所以我尝试了这个:
string test = "2017-01-01T12:00:33:123456Z+02";
DateTime publishingTimeStamp = DateTime.ParseExact(test, "yyyy-MM-dd'T'HH:mm:ss:ffffffzz", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None);
不幸的是,它不起作用。如何转换确切的字符串“2016-01-01T10:00:55:123456Z+02”?甚至可能因为它在ffffff前面使用“:”
谢谢
【问题讨论】:
"...它不工作" 怎么样?你得到什么结果,你期望什么结果?你有错误吗?如果是,是哪一个? 为什么是ParseExact
?您可以使用简单的DateTime.Parse(test, out dt)
。使用 ISO 字符串不需要文化、格式等。
不,那是my initial answer,但格式与该格式的偏差太大了@i486
你最后使用Z+02
。通常,UTC 偏移量不是Z
,因为 Z 表示 UTC 或 +00。你确定偏移前有Z
吗?
确实,该日期格式无效@Wimmel这就是我删除答案的原因。 OP 的客户应使用标准格式的日期。
【参考方案1】:
您似乎忘记将Z
转义为'Z'
格式的字符串文字分隔符。
string test = "2017-01-01T12:00:33:123456Z+02";
DateTime publishingTimeStamp = DateTime.ParseExact(test,
"yyyy-MM-dd'T'HH:mm:ss:ffffff'Z'zz",
CultureInfo.InvariantCulture, DateTimeStyles.None);
Console.WriteLine(publishingTimeStamp); // 01.01.2017 12:00:33
但由于您的字符串具有 UTC Offset 值,因此我会将其解析为 DateTimeOffset
。
string test = "2017-01-01T12:00:33:123456Z+02";
DateTimeOffset publishingTimeStamp = DateTimeOffset.ParseExact(test,
"yyyy-MM-dd'T'HH:mm:ss:ffffff'Z'zz",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
现在你有一个DateTimeOffset
作为01.01.2017 12:00:33 +02:00
【讨论】:
谢谢你,我真的把'Z'zz弄得一团糟。你拯救了我的一天! 请注意至少:
也应该被转义,除非正确指定区域性。否则可能会改变解释。
@SamiKuhmonen 没错。这就是我使用InvariantCulture
的原因,因为它已经 将:
字符串作为TimeSeparator
。以上是关于将字符串“2017-01-01T12:00:33:123456Z+02”转换为 DateTime [重复]的主要内容,如果未能解决你的问题,请参考以下文章