我在使用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将成立。但是,我需要知道哪个部分日期已成功解析
答案 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"`
无需检查实际解析的内容。 如果日期时间值有效则将被解析,否则将返回默认的日期时间值。