I try to convert string to datetime but each time I get :
String was not recognized as a valid DateTime.
Code is:
string format = "dd/MM/yyyy";
obj.TransDate = DateTime.ParseExact(lbl_TransDate.Text.Split('/')[0] + "/" + lbl_TransDate.Text.Split('/')[1] + "/" + lbl_TransDate.Text.Split('/')[2], format, CultureInfo.InvariantCulture);
When I debug the date which I try to parse it is : 12/4/2012
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The desired format is
string format = "dd/M/yyyy";
I don’t understand a thing though, why split an concatenate the string, since you would obtain the same thing?
If the input is 12/4/2012, after the split by ‘/’, you’ll get 12, 4, 2012 and then concatenate them back to obtain “12/4/2012”. Why this?
Also, if you really need that split, you can store in into an array so you don’t need to split it 3 times:
var splits = lbl_TransDate.Text.Split('/');
DateTime.ParseExact(splits[0] + "/" + splits[1] + "/" + splits[2], ...);
If you don’t trust the input, the splits array might not be of Length = 3, and more of it, you can use DateTime.TryParseExact
EDIT You can use the overload with multiple formats
So if the input might be 12/4/2012 or 12/04/2012, you can give both formats
var formats = new[] {"dd/M/yyyy","dd/MM/yyyy"};
var date = DateTime.ParseExact("12/4/2012", formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AssumeLocal);
Method 2
I agree with the other answers that it looks like your doing a lot to solve what should be a simple problem. I’d use the British date format from the culture info.
var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat);
Method 3
You are specifying MM when you only have a single digit. Either use just a single M, or pad left with zero using the PadLeft function.
The following code demonstrates this with both dd and MM padded as desired
string format = "dd/MM/yyyy";
string mydate = "12/4/2012";
DateTime t = DateTime.ParseExact(mydate.Split('/')[0].PadLeft(2,'0') + "/" +
mydate.Split('/')[1].PadLeft(2,'0') + "/" +
mydate.Split('/')[2], format, CultureInfo.InvariantCulture);
Output is:
12/04/2012 00:00:00
Method 4
Make sure you add the following in your web config
<system.web> <globalization culture="en-AU"/>...
See the following for the correct culture country code
http://sharpertutorials.com/list-of-culture-codes/
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0