c# - 具有自定义格式的 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);
非常感谢任何答案
解决方案
听起来好像不能真正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]
);
推荐阅读
- php - 通过 https 的 Websocket ERR_SSL_PROTOCOL_ERROR
- node.js - 如何避免阻塞特快休息服务?
- javascript - 如何在不重新加载页面的情况下模拟 Netflix 中的视频播放?
- version-control - 如何在没有版本控制的情况下查看变更列表
- react-native - 具有多项选择的 ButtonGroup
- flutter - Flutter:Future.doWhile 结束超时异常
- python - 用硒抓取 Instagram 标记照片
- machine-learning - 如果我在 2 个不同的交叉验证中使用相同的随机状态,我会得到相同的拆分吗?
- hibernate - 从 IntelliJ idea 运行时未填充 Hibernate 集合
- groovy - groovy中的字符串插值