我使用自由格式日期作为搜索语法的一部分。我需要从字符串中解析日期,但只保留实际指定的日期部分。例如,“2010 年 11 月 1 日”是特定日期,但“2010 年 11 月”是“2010 年 11 月 1 日”到“2010 年 11 月 30 日”的日期范围。
不幸的是,DateTime.Parse
朋友们将这些日期解析为相同的DateTime
:
DateTime.Parse("November 1, 2010") // == {11/1/2010 12:00:00 AM}
DateTime.Parse("November, 2010") // == {11/1/2010 12:00:00 AM}
我需要知道哪些部分DateTime
被实际解析,哪些部分被解析器猜到了。本质上,我需要DateTime.Parse("November, 2010") == {11/-1/2010 -1:-1:-1}
;然后我可以看到缺少日期部分并计算覆盖整个月的日期范围。
(在内部,C# 具有解析日期并准确保存我需要的信息的DateTimeParse
类DateTimeResult
,但是当日期返回到公共接口时,它已被剥离。我宁愿避免反映到这些类中,除非那是真的唯一的路线。)
有什么方法可以DateTime.Parse
告诉我它用来解析日期的格式吗?或者返回的是否可以DateTime
有未指定部分的占位符?我也愿意使用另一个日期解析器,但我希望它与内部解析器一样可靠且区域设置灵活。提前致谢。
编辑:我也试过ParseExact
,但枚举所有Parse
可以处理的格式似乎几乎是不可能的。Parse
实际上接受的格式比返回的格式要多DateTimeFormatInfo.GetAllDateTimePatterns
,这是我能找到的规范来源。