【问题标题】:DateTime ParseExact exceptionDateTime ParseExact 异常
【发布时间】:2012-10-27 07:46:34
【问题描述】:
var str = "00:00:00 02/01/1990";
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

以上代码抛出异常“字符串未被识别为有效的日期时间。”

我认为使用 ParseExact 并指定确切的格式就可以了。以上有什么问题?

编辑:

使用不变文化解决。感谢 cmets。

var dt = DateTime.ParseExact(str, "HH:mm:ss dd/MM/yyyy", CultureInfo.InvariantCulture);

【问题讨论】:

  • 您的目标是什么框架版本?似乎适用于 4.0
  • : 和 / 字符被本地文化的时间和日期分隔字符替换,即使是 ParseExact()。因此,您必须指定一种文化以获得可重复的结果,例如不变量。

标签: c# .net datetime


【解决方案1】:

“hh”格式说明符用于 12 小时 AM/PM 时间,不支持“00”。尝试在 24 小时内定义它:HH:mm:ss dd/MM/yyyy

【讨论】:

  • 我收到与 HH 相同的错误,“字符串未被识别为有效的 DateTime。”
【解决方案2】:

是的,通常在DateTime 格式中,Date 先于Time。试试这个:

var str = "02/01/1990 00:00:00";
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

已编辑:好的,所以你只需要一个技巧即可完成:

var str = "00:00:00 02/01/1990";
var split = str.Split(new char[] { ' ' });
if (split.Length == 2)
    str = String.Format("{0} {1}", split[1], split[0]);
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

【讨论】:

  • 程序正在从 csv 文件导入数据。在 csv 文件中,格式为“00:00:00 02/01/1990”而不是“02/01/1990 00:00:00”。这就是为什么我需要使用上面指定的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多