没有更改字符串就无法解析它,因为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# 转换日期时间