0

我在 C# 中使用DateTime.TryParse().

本质上,给定一个字符串,我需要提取当前显示文化中的年份和/或月份和日期。有时我只得到一年,或一个月,或全部三个。根据我得到的,我有不同的控制流程。

到目前为止,我设法将各种字符串解析为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 将为真。但是,我需要知道日期的哪些部分已成功解析

4

2 回答 2

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 返回真或假。如果失败则为假。也许有用吗?否则,如果可以的话,您可以在 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)尾随。”

希望其中一些有所帮助。

于 2013-07-23T11:54:15.253 回答
0

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

1)

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

2)

`DateTime dt;
DateTime.TryParse("23/12/2013 6:25", out dt);
// dt contains "23/12/2013 06:25:00"`

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

于 2013-07-23T12:36:58.903 回答