我有一个 14 位的号码,其中包含 2 个字符的 AM/PM, 我想将它们转换为 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
最佳答案
因为 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 位数字的情况。
关于c# - 在 C# 中将 14 数字转换为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468329/