将字符串“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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c# 如何将字符串转换成url

编写一个函数,将一个数字字符串转换为一个整数

如何将C#/.NET 将json字符串格式数据转换成对象?

如何将字符串数组转化为一个字符串

如何将字符串转换为整型数?

如何将字符串转换成javaBean