没有更改字符串就无法解析它,因为M格式说明符 可以是两位数,并且它将映射为解析51为一个月。这就是你的操作抛出的原因FormatException。与h格式说明符相同。
这就是为什么我们需要将您的字符串从 更改515201483742AM为05152014083742AM以提供M格式说明符将映射05和h格式说明符将映射08。
您可以使用类似1的方法;
public static DateTime? ParseDate_Mdyyyyhmmsstt(string date)
{
if (date == null)
return null;
if (date.Length < 14)
return null;
if (date.Length == 14)
date = date.Insert(0, "0").Insert(8, "0");
DateTime dt;
if (DateTime.TryParseExact(date, "Mdyyyyhmmsstt",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
return dt;
return null;
}
并称之为;
var dt = ParseDate_Mdyyyyhmmsstt("515201483742AM");
Console.WriteLine(dt.Value); // 15.05.2014 08:37:42
1:我知道这不是一个优雅的解决方案,但是当您的月份和小时部分为 1 位数时,它适用于您的情况。
阅读:从字符串 C# 转换日期时间