为什么DateTime.TryParseExact带日格式时NoCurrentDateDefault失效
原因说明
DateTimeStyles.NoCurrentDateDefault仅在待解析内容完全不包含任何年、月、日类日期分量时生效,会将默认日期填充为0001年1月1日。两种场景的填充规则差异直接导致了对应的现象:
- 调用
DateTime.TryParseExact("5 11:20", "d HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dateTime)时,格式串包含日分量标识d,且输入提供了明确的日数值5,属于提供了部分日期分量的场景,此时缺失字段的填充规则为:缺失月份默认取1月,缺失年份默认取当前系统年份,最终得到01/05/2021 11:20:00的结果。 - 调用
DateTime.TryParseExact("11:20", "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dateTime)时,格式串仅包含时间分量,完全没有涉及日期相关字段,此时触发NoCurrentDateDefault规则,日期部分默认填充为0001/01/01,符合预期。
如果需要强制让仅提供日/月的场景也默认用0001作为年份,可以在解析完成后手动覆盖年份字段即可。
内容的提问来源于stack exchange,提问作者harrygg
相关产品推荐
相关产品推荐

