DateTime.ParseExact失败(字符串无效的日期时间格式)

时间:2013-04-17 20:19:24

标签: c#

我正在尝试在使用格式M/d/yyyy HH:mm:ss:fff的时间戳上使用DateTime.ParseExact,并且编译器告诉我这不会发生。

我的时间戳示例是:

3/26/2013 14:37:05:553

...我的代码示例是,_CultureInfo是en-us。

DateTime someDateTime = DateTime.ParseExact("3/26/2013 14:37:05:553","M/d/yyyy HH:mm:ss:fff", _CultureInfo.DateTimeFormat);

见下面的图片...我错过了什么?

enter image description here

新修改

我还尝试了几件事但仍然没有运气:

  • :fff更改为.fff
  • _CultureInfo.DateTimeFormat更改为System.Globalization.CultureInfo.InvariantCulture,并按照以下建议将d更改为dd

您可以将以下内容投入到控制台中,然后运行以查看此操作的确切结果。

    class Program
    {
        static void Main(string[] args)
        {
            CsvImporter importer = new CsvImporter();

            DateTime readtime = importer.Parse(@"""3/26/2013 14:37:07:238,00:00:01.6850000,23.138,23.488,23.175""");

            Console.WriteLine(readtime.ToString());
        }
    }

    class CsvImporter
    {
        public Char[] _SeparatorChars = new Char[] { ',' };

        public DateTime Parse(string text)
        {
            System.Globalization.CultureInfo _CultureInfo = System.Globalization.CultureInfo.CurrentCulture;

            string txt = text.Replace('"', ' ');
            string[] columns = txt.Split(_SeparatorChars);

            return DateTime.ParseExact(columns[0], "M/dd/yyyy HH:mm:ss:fff", _CultureInfo.DateTimeFormat);
            //return DateTime.ParseExact(columns[0], "M/dd/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture);
        }
    }

3 个答案:

答案 0 :(得分:4)

试试这个(将d更改为ddCultureInfo.InvariantCulture

DateTime someDateTime = DateTime.ParseExact("3/26/2013 14:37:05:553", "M/dd/yyyy HH:mm:ss:fff", CultureInfo.InvariantCulture);

答案 1 :(得分:1)

问题在于string txt = text.Replace('"', ' ');

这会将column[0]转变为[space]3/26/2013 14:37:05:553而非3/26/2013 14:37:05:553,就像我期望的那样。

将此行更改为string txt = text.Replace(@"""", "");可解决问题。

答案 2 :(得分:0)

每当您致电ParseExact时,请确保您使用的是明确的格式字符串。在.NET中,格式字符串中的/字符是system date separator,而不是实际的斜杠。同样适用于:字符。

要使用您的结构解析字符串,请使用反斜杠转义斜杠和冒号,例如:

DateTime.ParseExact(s, @"M\/d\/yyyy HH\:mm\:ss\:fff", null)
// or
DateTime.ParseExact(s, "M\\/d\\/yyyy HH\\:mm\\:ss\\:fff", null)

这将告诉解析器您特别需要正斜杠和冒号,而不管您的系统首选项或当前文化。