DateTime.TryParseExact不会分析看起来有效的日期字符串

这将是其中一个“我不相信我没有想到这个”的问题,但是让我两天的时间感到困扰。

我从这种格式的.csv文件中获得了一堆日期字符串(以及更多列数据): 8/8/2017 8:57

我已阅读这里和这里的SO问题以及MSDN上的文档。

以下是我在LINQPad的C#语句中尝试过的一些事情,可以从MSDN示例中进行修改:

string[] data = { "8/8/2017 8:57,-1.220135,-1.239456,-3.20E-08,-4.47E-09,-1.202865"};
Console.WriteLine(data);

string dateValue = "8/8/2017 8:57";
string[] patterns = {"M/d/yyyy H:mm", "MM/dd/yyyy H:mm"};

DateTime parsedDate;

if (DateTime.TryParseExact(data[0].ToString(), patterns,
       System.Globalization.CultureInfo.CurrentCulture,
       System.Globalization.DateTimeStyles.None,
       out parsedDate))
{
    Console.WriteLine("Converted '{0}' to {1}.",
    dateValue,
    parsedDate);
}
else
{
    Console.WriteLine("Unable to convert '{0}' to a date and time.",
    dateValue);
}

if (DateTime.TryParseExact(data[0].ToString(),
    patterns,
    null,
    System.Globalization.DateTimeStyles.None,
    out parsedDate))
{
    Console.WriteLine("Converted '{0}' to {1}.",
    dateValue, 
    parsedDate);
}
else
{
    Console.WriteLine("Unable to convert '{0}' to a date and time.",
    dateValue);
}

两者都导致:

Unable to convert '8/8/2017 8:57' to a date and time.

Unable to convert '8/8/2017 8:57' to a date and time.

我试过string[] patterns...声明中的几个变体无济于事。

我错过了什么? 我怀疑问题在于我的模式数组,但也许不是? 这似乎应该很容易。

我没有结婚到DateTime.TryParseExact() ,只要我从转换中获得有效的DateTime。

编辑:在一些评论后,我检查了我的CultureInfo.CurrentCulture ,它是en-US ,应该没问题,或者至少我是这么认为的。

Edit1:正如大多数人所指出的那样,我使用的是整个字符串而不是日期值,尽管我仍然使用单个字符串得到错误。 这是第一个if()修改,如下面的Joel所建议的那样:

string[] data = "8/8/2017 8:57,-1.220135,-1.239456,-3.20E-08,-4.47E-09,".Split(',');
string dateValue = "8/8/2017 8:57";
string[] patterns = {"M/d/yyyy H:mm"};

DateTime parsedDate;

if (DateTime.TryParseExact(data[0], patterns,
       System.Globalization.CultureInfo.CurrentCulture,
       System.Globalization.DateTimeStyles.None,
       out parsedDate))
{
    Console.WriteLine("Converted '{0}' to {1}.",
    dateValue,
    parsedDate);
}
else
{
    Console.WriteLine("Unable to convert '{0}' to a date and time.",
    dateValue);
}

我已经设法将这个版本合并到我的生产代码中,并按预期工作。 谢谢您的帮助。


仔细看看你的数据:

string[] data = { "8/8/2017 8:57,-1.220135,-1.239456,-3.20E-08,-4.47E-09,-1.202865"};

该数组只有一个元素,其中该元素的值是所有文本。 它在控制台消息中看起来不同,因为您将8/8/2017 8:57值放入单独的变量中,而不是使用数组。

你可能想要这个吗?

string[] data={"8/8/2017 8:57","-1.22013","-1.239456","-3.20E-08","-4.47E-09","-1.202865"};

或者你也许想要这样做:

var data = "8/8/2017 8:57,-1.220135,-1.239456,-3.20E-08,-4.47E-09,-1.202865".Split(',');

**注意我通常不会宽恕使用.Split()作为csv解析器,但对于这个简单的示例,它可以获得重点。

无论你做什么,我都要确保你的控制台消息准确地反映你试图做的事情(使用data[0]作为第一个替换),所以你可以确定TryParseExact()方法正在查看你认为它的字符串。

链接地址: http://www.djcxy.com/p/75121.html

上一篇: DateTime.TryParseExact won't parse what appears to be a valid date string

下一篇: Format date string in a specific pattern