This is going to be one of those "I can't believe I didn't think of that" questions, but it's been vexing me for going on two days.
I've got bunch of date strings (and many more columns of data) coming out of a .csv file that are in this format: 8/8/2017 8:57
I've read through the SO questions here and here as well as the documentation on MSDN from here and here.
Here are a couple of things I've tried in C# statements in LINQPad, adapted from the 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);
}
Both result in:
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.
I've tried several variants in the string[] patterns...
declaration to no avail.
What am I missing? I suspect the problem lies in my patterns array, but maybe not? This seems like it should be easy.
I'm not married to DateTime.TryParseExact()
, so long as I get a valid DateTime out of the conversion.
Edit: After some of the comments, I've checked my CultureInfo.CurrentCulture
, and it is en-US
, which should be fine, or at least I think so.
Edit1: As pointed out by most, I was using an entire string instead of the date value, although I still get an error using the single string. Here's the first if()
modified as suggested by Joel below:
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);
}
I've managed to incorporate a version of this into my production code that's working as expected. Thanks for the help.