【发布时间】:2013-07-23 11:40:53
【问题描述】:
我在使用 DateTime.TryParse() 的 C# 中有点挣扎。
基本上,给定一个字符串,我需要提取当前显示文化中的年和/或月和日。有时我只得到一年,或一个月,或全部三个。根据我得到的,我有不同的控制流程。
到目前为止,我设法将各种字符串解析为DateTime;这不是我的问题。
我的问题是我想知道实际解析了什么(即我得到了一个月还是一年,或两者兼而有之)。
未初始化的DateTime默认为01/01/0001,我无法将所有内容设置为无效日期,例如99/99/9999,然后查看填充了什么。
我在想也许我需要做正则表达式,但 DateTime 类提供了对多种文化的解析,这在这个项目中非常重要。
我试过搜索这个,但也许我没有使用正确的术语,因为肯定有人以前遇到过这个问题。
更新: 这是我所拥有的一些示例代码:
string strIn = Console.ReadLine();
DateTimeStyles enStyles = DateTimeStyles.AllowInnerWhite | DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite | DateTimeStyles.AssumeLocal;
bFound = DateTime.TryParse(strIn, CultureInfo.CreateSpecificCulture("en-US"), enStyles, out cDT);
现在,如果 something 被成功解析,bFound 将为真。但是,我需要知道日期的哪些部分被成功解析
【问题讨论】:
-
您能否提供更清晰的说明?您想检测无效日期吗?实际上你的问题并不清楚这个问题。
-
您期望什么样的输入...提供一些示例。但一般而言,TryParse 方法只是尝试确定字符串是否为可制成日期的格式。你总是得到 4 位数的年份吗?如果不是,那么您如何区分 1912 年的“12”年和 12 月(即 12 月)之间的区别?
-
“解析了什么”是什么意思?它要么完全解析,要么不解析。解析“一个月”或“一年”的例子是什么?此外,
DateTime基本上只是一个数字。它并没有真正将月份部分或年份部分保留在单独的字段中。 -
好吧,也许我的措辞令人困惑。我希望能够问“你有一年吗?”或“您是否因为未提供任何月份而默认月份?”
-
好吧,我不认为有任何内置的东西。所以你需要自己做检查。例如,如果年份不是 0001 或当前年份,则可能已提供。如果 inputString.Contains("0001" or current year),它也被提供。如果没有,那么可能只提供了年份的最后两位数字,但检查可能会干扰月/日值。几个月会特别有趣。玩一下GetMonthName。不过你可能不会得到 100%...
标签: c# datetime localization tryparse