DateTime.TryParse - 实际解析了什么?

时间:2013-07-23 11:40:53

标签: c# datetime localization tryparse

我在使用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);

现在,如果某事被成功解析,bFound将成立。但是,我需要知道哪个部分日期已成功解析

2 个答案:

答案 0 :(得分:3)

我不了解你,但是你在寻找日期时间的指定格式吗?

string dateAndTimeFormat = "yyyy.MM.dd HH:mm:ss:fff"; // example of format

string dateAndTime = yourdatetimevalue;

DateTime toDateTime = DateTime.ParseExact(dateTime, dateTimeFormat, System.Globalization.CultureInfo.InvariantCulture)

如何使用格式: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx

编辑1

tryparse返回true或false。如果失败则返回false。也许这可能有用吗? 否则,您可以在tryparse之前设置文化,如果您能够这样做的话。

DateTime.TryParse(dateString, culture, styles, out dateResult)

查看以下示例:http://msdn.microsoft.com/en-us/library/9h21f14e.aspx

备注:

“如果可能,此方法会尝试忽略无法识别的数据,并使用当前日期填写缺少的月,日和年信息。如果s仅包含日期且没有时间,则此方法假定时间为12:00午夜。如果s包含一个两位数年份的日期组件,它将根据Calendar.TwoDigitYearMax属性的值转换为当前文化的当前日历中的年份.s中的任何前导,内部或尾随空格字符被忽略。日期和时间可以用一对前导和尾随的NUMBER SIGN字符('#',U + 0023)括起来,并且可以用一个或多个NULL字符(U + 0000)跟踪。“

希望其中一些有用。

答案 1 :(得分:0)

DateTime.TryParse()仅在成功时返回值。 因此,对于下面的代码示例,变量dt在声明时初始化为 01/01/0001 00:00:00 。 当TryParse尝试从字符串( MM / DD / YYYY 格式)中提取日期时,如果它失效,则dt变量的值为 {{1} } 即可。否则01/01/0001 00:00:00将包含实际提取的日期时间值(如2)。

1)

dt

2)

DateTime dt;
DateTime.TryParse("23/15/2013", out dt);
// dt contains "01/01/0001 00:00:00"`

无需检查实际解析的内容。 如果日期时间值有效则将被解析,否则将返回默认的日期时间值。