public static Nullable <DateTime> ToDate2(string str) { /*input yyyyMMdd*/ try { if (str == null) { return(null); } if (str.Length != 8) { return(null); } int year = NumUtil.ParseInteger(str.Substring(0, 4)); int month = NumUtil.ParseInteger(str.Substring(4, 2)); int day = NumUtil.ParseInteger(str.Substring(6, 2)); var d = DateTime.ParseExact(str, "yyyyMMdd", null); if (d.Year < 1500) { year += 543; str = year.ToString("0000") + month.ToString("00") + day.ToString("00"); } else if (d.Year > 2500) { year -= 543; str = year.ToString("0000") + month.ToString("00") + day.ToString("00"); } return(DateTime.ParseExact(str, "yyyyMMdd", null)); } catch { return(null); } }
public static Nullable <DateTime> ToDate(string str, string indicator = "/") { try { if (str == null) { return(null); } int day = 0; int month = 0; int year = 0; string[] indicators = { indicator }; var datesplit = str.Split(indicators, StringSplitOptions.RemoveEmptyEntries); if (datesplit.Length == 3) { day = NumUtil.ParseInteger(datesplit[0]); month = NumUtil.ParseInteger(datesplit[1]); year = NumUtil.ParseInteger(datesplit[2].Substring(0, 4)); } if (str.Contains(":")) { int hour = 0; int min = 0; int sec = 0; var dsplte = str.Split(' '); if (dsplte.Length == 2) { dsplte = dsplte[1].Split(':'); if (dsplte.Length == 2) { hour = NumUtil.ParseInteger(dsplte[0]); min = NumUtil.ParseInteger(dsplte[1]); if (string.IsNullOrEmpty(dsplte[0]) && string.IsNullOrEmpty(dsplte[1])) { str = str.Replace(":", "").Trim(); } //var d = DateTime.ParseExact(str, "dd" + indicator + "MM" + indicator + "yyyy HH:mm", null); if (year < 1500) { year += 543; str = day.ToString("00") + indicator + month.ToString("00") + indicator + year.ToString() + " " + hour.ToString("00") + ":" + min.ToString("00"); } else if (year > 2500) { year -= 543; str = day.ToString("00") + indicator + month.ToString("00") + indicator + year.ToString() + " " + hour.ToString("00") + ":" + min.ToString("00"); } return(DateTime.ParseExact(str, "dd" + indicator + "MM" + indicator + "yyyy HH:mm", null)); } else if (dsplte.Length == 3) { hour = NumUtil.ParseInteger(dsplte[0]); min = NumUtil.ParseInteger(dsplte[1]); sec = NumUtil.ParseInteger(dsplte[2]); if (string.IsNullOrEmpty(dsplte[0]) && string.IsNullOrEmpty(dsplte[1]) && string.IsNullOrEmpty(dsplte[2])) { str = str.Replace(":", "").Trim(); } //var d = DateTime.ParseExact(str, "dd" + indicator + "MM" + indicator + "yyyy HH:mm:ss", null); if (year < 1500) { year += 543; str = day.ToString("00") + indicator + month.ToString("00") + indicator + year.ToString() + " " + hour.ToString("00") + ":" + min.ToString("00") + ":" + sec.ToString("00"); } else if (year > 2500) { year -= 543; str = day.ToString("00") + indicator + month.ToString("00") + indicator + year.ToString() + " " + hour.ToString("00") + ":" + min.ToString("00") + ":" + sec.ToString("00"); } return(DateTime.ParseExact(str, "dd" + indicator + "MM" + indicator + "yyyy HH:mm:ss", null)); } } } else { var d = DateTime.ParseExact(str, "dd" + indicator + "MM" + indicator + "yyyy", null); if (d.Year < 1500) { year += 543; str = day.ToString("00") + indicator + month.ToString("00") + indicator + year.ToString(); } else if (d.Year > 2500) { year -= 543; str = day.ToString("00") + indicator + month.ToString("00") + indicator + year.ToString(); } return(DateTime.ParseExact(str, "dd" + indicator + "MM" + indicator + "yyyy", null)); } } catch { return(null); } return(null); }