这将是其中之一"我无法相信我没有想到这个"问题,但它让我两天都感到烦恼。
我有一堆日期字符串(以及更多数据列)来自.csv文件,格式为:8/8/2017 8:57
我已阅读了SO here和here以及来自here和here的MSDN上的文档。
以下是我在LINQPad中使用C#语句尝试的一些内容,改编自MSDN examples:
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:正如大多数人所指出的,我使用整个字符串而不是日期值,尽管我仍然使用单个字符串收到错误。以下是Joel建议修改的第一个if()
:
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);
}
我已成功将其中的一个版本合并到我的生产代码中,并按预期工作。谢谢你的帮助。
答案 0 :(得分:2)
仔细查看您的数据:
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()
方法是看着你认为它的字符串。