2

我很震惊为什么它给我一个错误

Convert.ToDateTime("7/16/2013 7:00:00 AM");

但如果我使用效果很好

Convert.ToDateTime(("16/7/2013 7:00:00 AM");

我如何将“7/16/2013 7:00:00 AM”转换为DateTime

4

3 回答 3

7

您可以使用特定的语言环境,也可以自己定义格式,如下所示:

 var dt = DateTime.ParseExact("7/16/2013 7:00:00 AM", "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

我用过

  • M 月 0-12 数字,不带前导零
  • d 天数 0-31,不带前导零
  • yyyy 所有数字的年份
  • 12h 格式的 M 小时 0-12 不带前导零
  • mm 分 0-59,带前导零
  • ss 秒 0-59 带前导零

作为文化,我确实指定了在所有系统上基本上都是英语的不变文化。无论系统或线程的当前文化如何,它都是相同的。

您的问题确实源于您确实尝试使用系统中相同的线程语言环境处理来自不同语言环境的日期,这似乎是英语。要正确处理日期,您需要知道它是在哪个语言环境中输入的,以便能够正确解析它。某些语言环境确实会像您的示例中那样切换例如月份和日期。有些人使用不同的分隔符,甚至其他文化对 . , 字符作为千位分隔符和小数点。

德语使用 , 作为小数点和 . 作为千位分隔符。约会看起来像

“2013 年 12 月 24 日 14:25:59”

没有 AM/PM 没有 / 但有很多点。

于 2013-08-03T05:41:08.960 回答
1

您必须了解文化,请参阅此链接:Convert.ToDateTime 方法

CultureInfo culture = new CultureInfo("en-US");

Convert.ToDateTime("7/16/2013 7:00:00 AM", culture );
于 2013-08-03T05:24:59.747 回答
0

您可以简单地尝试使用DateTime.TryParse()

DateTime dt;
if(DateTime.TryParse("7/16/2013 7:00:00 AM", out dt))
    Console.Write(dt);
于 2013-08-03T05:46:13.560 回答