c# - DateTime.TryParseExact 忽略 DateTimeStyles.NoCurrentDateDefault
问题描述
当格式字符串不提供月份和年份,而只提供时间和日期时,我正在尝试解析 DateTime。所以我的假设是,在下面的调用之后,月份和年份将设置为 01 和 0001。但是,结果显示月份设置为 01,年份设置为 2021 年。
DateTime.TryParseExact("5 11:20", "d HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dateTime);
返回:01/05/2021 11:20:00
当我删除日期格式时,它似乎有效:
DateTime.TryParseExact("11:20", "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dateTime);
代码可以在这里运行:https ://dotnetfiddle.net/YADrwn
知道为什么会这样吗?
解决方案
在参考源中,我们可以看到bTimeOnly
如果您有几天、几个月或几年的时间,则有一个计算标志为假。
TryParseExact 的私有函数调用: https ://referencesource.microsoft.com/#mscorlib/system/globalization/datetimeparse.cs,2558c4cbd566081b
检查它是否只是时间或日期的时刻: https ://referencesource.microsoft.com/#mscorlib/system/globalization/datetimeparse.cs,4134
假设只有一天 = 当年、第一个月和读取日期的时刻: https ://referencesource.microsoft.com/#mscorlib/system/globalization/datetimeparse.cs,ed47be441811082c
所以,这正是你的行为。似乎是有意的。
无论如何,您可以使用 获取时间部分dateTime.TimeOfDay
。
推荐阅读
- jmeter - 如何使用环境变量创建 JMETER setenv.bat 文件
- git - 将部分文件移动到其他文件并保留 git 历史记录
- sapui5 - 自定义控件:更新聚合时的“Lifecycle-Method”
- java - 有没有办法获取所有 YAML 密钥并为每个密钥执行不同的任务?
- maven - Maven 版本范围:发布与快照版本
- r - 在 ggplot 直方图中显示百分比
- websphere - IBM ESQL 中的显式生成是什么?
- python - Python 新手,对超过 2 个实例使用 __add__ 方法?
- python - 我应该如何从 Cifar-100 中提取一个子集作为我的自定义训练集?
- django - 如何在 django 中进行常见查询?