c# - 在 C# 中将 14 数字转换为 DateTime

标签 c# string datetime datetime-parsing

我有一个 14 位的号码,其中包含 2 个字符的 AM/PM, 我想将它们转换为 dateTime

例如:515201483742AM

我试过这段代码:

DateTime result = 
DateTime.ParseExact(dateString, "Mdyyyyhmmsstt",
 CultureInfo.CreateSpecificCulture("en-US"));

输出格式错误

515201483742AM5 15 2014 8 37 42 AM

月份是 M,没有前导 0

天也d没有前导0

时间相同,tt AM

最佳答案

因为 M format specifier 没有办法在不改变它的情况下解析你的字符串可以是两位数,它将映射到将 51 解析为一个月。这就是您的操作抛出 FormatException 的原因.与 h format specifier 相同.

这就是为什么我们需要将您的字符串从 515201483742AM 更改为 05152014083742AM 以提供 M 格式说明符将映射 05h 格式说明符将映射 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 位数字的情况。

阅读:DateTime conversion from string C#

关于c# - 在 C# 中将 14 数字转换为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468329/

相关文章:

php - 如何获取mysql中不同时区的总行数

c# - .NET 6 服务注册适用于具体类,但无法使用接口(interface)

c# - 我如何在 LINQ 中使用 Regex.Replace 方法

c - %g 浮点表示的最大字符串长度是多少?

javascript - 如何使用 moment.js 将日期时间从一个时区转换为另一个时区

r - 检查 R 中的连续时间变量

c# - 在 Windows 窗体中加载没有 CrystalReportViewer 的 Crystal 报表模板

c# - Windows Phone 8 slider 绑定(bind)仅在单击后起作用

C 字符串字符串比较总是导致 false

python - 与`sys.getsizeof`不一致