Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }