2001-07-08T00:00:00
I tried to parse it back to DateTime from a XML value string. Unfortunately, I tried every method I know but kept getting String was not recognized as a valid DateTime error. For example,
// Every method here causes String was not recognized as a valid DateTime error.
DateTime d = DateTime.Parse(query.Element("joinDate").ToString());
string dateStr = query.Element("joinDate").ToString().Replace("T", "");
DateTime d = XmlConvert.ToDateTime(dateStr, "yyyy-mm-dd hh:mm:ss");
string dateStr = query.Element("joinDate").ToString().Replace("T", "");
DateTime d = DateTime.ParseExact(dateStr, "yyyy-mm-dd hh:mm:ss", null);
string dateStr = query.Element("joinDate").ToString().Replace("T00:00:00", "");
DateTime d = DateTime.ParseExact(dateStr, "yyyy-mm-dd", null);
None of the above work for me. I also tried to follow the example/best practice discussed in MSDN but the error won't go away. Timezone is not my concern. As a matter of fact, my serialized XML value is not really represented in UTC time ( 2001-07-08T00:00:00 ). I guess it may be why MSDN suggestion won't work!
I finally gave up trying and use Regular Expression to parse the date fields and then convert it to DateTime manually. The following is my solution. I am sure that there is a better way to handle it but I just don't know how and probably I don't understand how the DataTime.Parse works!
// Manually parse the string to DateTime string pattern = @"(?\d{4})-(? \d{2})-(? \d{2})T00:00:00"; System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(query.Element("joinDate").ToString(), pattern); int year = int.Parse(m.Groups["year"].ToString()); int month = int.Parse(m.Groups["mth"].ToString()); int day = int.Parse(m.Groups["day"].ToString()); // this statement is also exactly how // I create the DateTime from the user's input. DateTime d = new DateTime(year, month, day);