无法将字符串识别为有效的日期时间c#错误

时间:2018-10-14 10:51:21

标签: c# .net datetime

我有下面的代码,可以将其他许多字符串格式转换为有效的日期时间格式。

  try
  {
  outputDate = DateTime.Parse(inputDateTime);
  }
  catch
  {
  outputDate = DateTime.Parse(inputDateTime, new CultureInfo("en-US"));
  }

但是在以下两种情况下,它总是会失败

2018年10月13日0 pm:27

GetValidDateTimeFromString错误->字符串未被识别为有效的DateTime。在System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,DateTimeStyles样式)    在O365InventoryApp.InventoryDataUtility.GetValidDateTimeFromString(String inputDateTime,TextWriter log)处

2018年10月14日00:57:21 ->的GetValidDateTimeFromString错误未识别为有效的DateTime字符串。在System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,DateTimeStyles样式)    在O365InventoryApp.InventoryDataUtility.GetValidDateTimeFromString(String inputDateTime,TextWriter log)处

请注意突出显示的两个日期在转换时会引发异常。我认为这是24小时格式的问题。因此,我也尝试像下面这样转换

log.WriteLine("GetValidDateTimeFromString error for " + inputDateTime + "-> " + ex.Message + ex.StackTrace);
                    CultureInfo provider = CultureInfo.InvariantCulture;
                    DateTimeStyles style = DateTimeStyles.None;
                    string[] format = new string[] { "dd-MM-yyyy h:m:s tt", "dd-MM-yyyy hh:mm:ss tt" };

                    DateTime dt;
                    if (DateTime.TryParseExact(inputDateTime, format, provider, style, out dt))
                    {
                        log.WriteLine("updated date -" + dt);
                        outputDate = dt;
                    }

任何人都可以启发我这里发生的事情吗?

3 个答案:

答案 0 :(得分:0)

我认为DateTime.Parse无法接受您提供的格式,请尝试以下操作:

flatMap

答案 1 :(得分:0)

它可能如CodeProject中所述:

Windows 10添加了对Jalali日历的新支持:

在Windows 10及更低版本上调用的DateTimeFormatInfoSystem.Globalization类应返回不同的日期格式字符串。

,例如(以波斯日历为例)

String[] dateParts = s.Split('-');
int year = int.Parse(dateParts[0]);
int month = int.Parse(dateParts[1]);
int day = int.Parse(dateParts[2]);
PersianCalendar pc = new PersianCalendar();
DateTime dt = pc.ToDateTime(year, month, day, 0, 0, 0, 0);

引用:

  

想到的第一种方法是将DateTime.Parse与   固定格式“ yyyy / MM / dd”。但这将在特定日期失败。所以   您必须将字符串分成年,月和日部分。

尝试拆分您的字符串,看看是否适合您。

答案 2 :(得分:0)

我尝试了您的代码,并从格式末尾删除了tt。对我有用:

var inputDateTime = "13-10-2018 05:00:27";
            CultureInfo provider = CultureInfo.InvariantCulture;
            DateTimeStyles style = DateTimeStyles.AllowInnerWhite;
            string[] format = new string[] { "dd-MM-yyyy h:m:s", "dd-MM-yyyy hh:mm:ss tt" }; // i removed tt from first format of formats array.
            DateTime dt;
            DateTime outputDate;
            DateTime.ParseExact(inputDateTime, format[0], provider);// and i used first index of formats array