【问题标题】:Convert string "2017-01-01T12:00:33:123456Z+02" to DateTime [duplicate]将字符串“2017-01-01T12:00:33:123456Z+02”转换为 DateTime [重复]
【发布时间】: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 的客户应使用标准格式的日期。

标签: c# datetime


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2018-01-24
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多