【问题标题】:convert resulting string datetime to dateTime value将结果字符串 datetime 转换为 dateTime 值
【发布时间】:2019-01-14 11:24:23
【问题描述】:

我正在通过 xml 获取日期时间值,例如:

string time = "20150605020247+0000"

我想转换成日期时间值。我试过DateTime.ParseParseExactConvert.ToDateTime。它不工作,它返回错误:

字符串未被识别为有效日期时间

【问题讨论】:

  • 请展示您为ParseExact 尝试过的内容,因为这样应该可以......
  • 如果你能在minimal reproducible example 上分享你目前的进展,那就太棒了。
  • 感谢您的回复,实际上我尝试使用 ParseExact,但它不起作用。DateTime theTime = DateTime.ParseExact(time2, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None) ;
  • 请将代码放入问题中
  • @SiddarthVarunesh - 正如您可能知道的那样,"yyyy-MM-dd" 不是您拥有的值的确切格式。

标签: c# xml linq-to-xml


【解决方案1】:

你应该像这样使用DateTime.ParseExact

DateTime theTime = DateTime.ParseExact(time,  "ddMMyyyyHHmmss+ffff,CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    您应该可以使用DateTime.ParseExact,因为您知道字符串的确切格式。如果我们假设它是年、月、日、小时、分钟、秒和偏移量,那么您可以执行以下操作:

    var result = DateTime.ParseExact("20150605020247+0000", "yyyyMMddHHmmsszzz", 
        CultureInfo.InvariantCulture);
    

    【讨论】:

    • 小心!! + 号后面的数字很可能是 UTC 偏移量(“zzz”说明符)而不是分数(“ffff”说明符)。分数通常用点号分隔;加号的本地时间偏移。请参阅我的答案以获取正确的格式说明符:stackoverflow.com/a/54180752/2308106
    • 仍然不完全正确。您需要 3 z('zzzz' 格式不存在)并且您需要大写 HH 小时 - 否则解析将在 12 小时以上崩溃。请参阅stackoverflow.com/a/54180752/2308106
    • 谢谢@Jan 我应该记住大写的H 24 小时。出于某种原因,4 z 有效,但我将其更改为 3。:)
    【解决方案3】:

    您需要在 ParseExact 方法中使用精确格式说明符。

    DateTime.ParseExact("20150605020247+0000", "yyyyMMddHHmmsszzz", System.Globalization.CultureInfo.InvariantCulture);
    

    小提琴:https://dotnetfiddle.net/cQJ9hN

    编辑:

    请检查 .NET 世界中使用的标准 DateTime 格式:https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings 并检查您的数据源,字符串日期是如何产生的。 但是,字符串的“+####”部分很可能是 本地日期 UTC 偏移量,而不是时间的小数部分(如其他答案所示)。所以通过使用“yyyyMMddhhmmssffff”解析日期会产生错误的结果

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 2011-10-16
      • 2016-03-17
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多