首页 > 解决方案 > 具有自定义格式的 DateTime.ParseExact 失败

问题描述

给定的是这个日期字符串2021.328.2042.52(来自外部来源)

我使用这种格式yyyy.Mdd.Hmm.s

我也用它来创建日期时间:DateTime.Now.ToString("yyyy.Mdd.Hmm.s")

但不知何故,无法使用以下语句解析日期:

DateTime.TryParseExact("2021.328.2042.52", "yyyy.Mdd.Hmm.s", CultureInfo.InvariantCulture, DateTimeStyles.None, out var x);

完整的测试代码:

var testDate = DateTime.Now.ToString("yyyy.Mdd.Hmm.s");

DateTime.TryParseExact(testDate, "yyyy.Mdd.Hmm.s", CultureInfo.InvariantCulture, DateTimeStyles.None, out var x);

非常感谢任何答案

标签: c#datetimeparsing

解决方案


听起来好像不能真正ParseExact无缝地工作,并且在将输入传递给之前按摩输入ParseExact可能会使代码混乱。

我们不关心文化(没有月份缩写,我们也不需要担心日/月顺序或分隔符)。所以我们可以自由地写出自己的算法。这是我的做法,我认为这是非常明确的:

var input = "2021.328.2042.52";
var segments = input.Split('.').Select(int.Parse).ToArray();
var result = new DateTime
(
    year:   segments[0],
    month:  segments[1] / 100,
    day:    segments[1] % 100,
    hour:   segments[2] / 100,
    minute: segments[2] % 100,
    second: segments[3]
);

推荐阅读