【问题标题】:Cannot Roundtrip DateTime Format无法往返日期时间格式
【发布时间】:2016-01-18 18:19:01
【问题描述】:

我使用自定义格式将 DateTime 转换为字符串:

var s = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");

现在,当我尝试反转它时:

var dt = DateTime.ParseExact(s, "yyyy/MM/dd hh:mm:ss");

我收到关于字符串格式无效的异常。我什至尝试通过 CultureInfo.InvariantCulture,但没有运气。 有什么想法吗?

【问题讨论】:

  • 无法用不变的文化重现错误...
  • 我也无法重现这一点。如果您使用正确的编程语言(即c#)标记您的问题也会很有帮助,因为 .NET 不是一种编程语言。
  • 由于DateTime.ParseExact 没有采用两个字符串参数的覆盖,因此您似乎没有显示原始代码。一个问题是您使用的小时说明符 hh 没有 AM/PM 指示符。尝试改用 HH,或添加 AM/PM 指示符。

标签: c# .net datetime format


【解决方案1】:

我错误地忘记了 ParseExact 的最后一个参数,它应该是 CultureInfo.InvariantCulture。然而,最终问题不在于 HH 而不是 hh。

【讨论】:

    【解决方案2】:

    如果您使用带有一个参数的 ToString 方法,则它使用 CurrentCulture 作为格式提供程序,可以将“/”符号更改为特定于您的文化(例如“.”)。 如果您可以接受 InvariantCulture,请尝试使用以下代码:

    var s = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture);
    var dt = DateTime.ParseExact(s, "yyyy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture);
    

    【讨论】:

    • 或者反过来:使用'/'而不是普通的/,总是使用斜线(所以"yyyy'/'MM'/'dd hh:mm:ss"
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2014-01-09
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多