我有一个带有2个AM / PM字符的14号码, 我想将它们转换为dateTime
例如:515201483742AM
我试过这段代码:
DateTime result =
DateTime.ParseExact(dateString, "Mdyyyyhmmsstt",
CultureInfo.CreateSpecificCulture("en-US"));
输出格式错误
其中515201483742AM
为5 15 2014 8 37 42 AM
月份为M
,没有前导0
天也d
没有领先0
小时相同,tt
为AM
答案 0 :(得分:1)
无法在不更改字符串的情况下解析字符串,因为M
format specifier 可以为两位数,并且它将映射为一个月解析51
。这就是你的操作抛出FormatException
的原因。与h
format specifier相同。
这就是为什么我们需要将您的字符串从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位数时,它适用于你的情况。
答案 1 :(得分:0)
使用double&#34; MM&#34;和&#34; dd&#34;而不是单一的&#34; M&#34;和&#34; d&#34;
DateTime result = DateTime.ParseExact(dateString,"MMddyyyyhmmsstt",CultureInfo.CreateSpecificCulture("en-US"));
它会起作用。