我有下面的代码,可以将其他许多字符串格式转换为有效的日期时间格式。
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;
}
任何人都可以启发我这里发生的事情吗?
答案 0 :(得分:0)
我认为DateTime.Parse无法接受您提供的格式,请尝试以下操作:
flatMap
答案 1 :(得分:0)
它可能如CodeProject中所述:
Windows 10添加了对Jalali日历的新支持:
在Windows 10及更低版本上调用的DateTimeFormatInfo
类System.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