System.DateTime.TryParse 方法
本文提供了此 API 参考文档的补充说明。
该方法 DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 分析可包含日期、时间和时区信息的字符串。 它类似于 DateTime.Parse(String, IFormatProvider, DateTimeStyles) 该方法,只是 DateTime.TryParse(String, DateTime) 该方法在转换失败时不会引发异常。
此方法尝试忽略无法识别的数据并完全分析输入字符串 (s
)。 如果 s
包含时间但不包含日期,则方法默认替换当前日期;如果 styles
包含 NoCurrentDateDefault 标志,则该方法将 DateTime.Date.MinValue
替换 。 如果 s
包含日期但没有时间,则午夜 12:00 用作默认时间。 如果某个日期存在,但其年份组件仅包含两位数,则会根据属性的值Calendar.TwoDigitYearMax将其转换为参数当前日历中的provider
一年。 将忽略任何前导、内部或尾随空格字符 s
。 日期和时间可以用一对前导和尾随数字符号字符('#',U+0023)括起来,并且可以用一个或多个 NULL 字符(U+0000)进行尾随。
日期和时间元素的特定有效格式以及日期和时间中使用的名称和符号由 provider
参数定义,可以是下列任一类型:
- 一个 CultureInfo 对象,表示在参数中使用
s
其格式的区域性。 属性 DateTimeFormatInfo 返回 CultureInfo.DateTimeFormat 的对象定义用于s
的格式 。 - 一个 DateTimeFormatInfo 对象,用于定义在 . 中使用的
s
格式设置。 - 一个自定义 IFormatProvider 实现。 其IFormatProvider.GetFormat方法返回一个DateTimeFormatInfo对象,该对象定义在 ..
s
如果 provider
为 null
,则使用当前区域性。
如果 s
当前日历中的 leap 年中的 leap 日是字符串表示形式,则该方法会成功分析 s
。 如果是 s
当前日历 provider
中非 leap 年中的 leap 日字符串表示形式,则分析操作失败,方法返回 false
。
该 styles
参数定义已分析字符串的精确解释,以及分析操作应如何处理它。 它可以是枚举的 DateTimeStyles 一个或多个成员,如下表所述。
DateTimeStyles 成员 | 说明 |
---|---|
AdjustToUniversal | 分析 s 并在必要时将其转换为 UTC。 如果 s 包含时区偏移量,或者 s 如果不包含时区信息,但 styles 包含 DateTimeStyles.AssumeLocal 标志,该方法将分析字符串,调用 ToUniversalTime 将返回 DateTime 的值转换为 UTC,并将属性设置为 KindDateTimeKind.Utc。 如果 s 指示它表示 UTC,或者 s 如果不包含时区信息但 styles 包含 DateTimeStyles.AssumeUniversal 标志,该方法将分析字符串,对返回 DateTime 的值不执行时区转换,并将属性设置为 KindDateTimeKind.Utc。 在所有其他情况下,标志不起作用。 |
AllowInnerWhite | 虽然有效,但忽略此值。 允许在日期和时间元素 s 中使用内部空格。 |
AllowLeadingWhite | 虽然有效,但忽略此值。 允许在日期和时间元素 s 中使用前导空格。 |
AllowTrailingWhite | 虽然有效,但忽略此值。 允许在日期和时间元素 s 的尾随空格。 |
AllowWhiteSpaces | 指定 s 可能包含前导空格、内部空格和尾随空格。 这是默认行为。 无法通过提供更严格的 DateTimeStyles 枚举值(例如 DateTimeStyles.None)来重写它。 |
AssumeLocal | 指定如果 s 缺少任何时区信息,则假定它表示本地时间。 DateTimeStyles.AdjustToUniversal除非存在标志,Kind否则返回DateTime值的属性将设置为 DateTimeKind.Local。 |
AssumeUniversal | 指定如果 s 缺少任何时区信息,则假定它表示 UTC。 DateTimeStyles.AdjustToUniversal除非存在标志,否则该方法将返回DateTime的值从 UTC 转换为本地时间,并将其Kind属性设置为 DateTimeKind.Local。 |
None | 虽然有效,但忽略此值。 |
RoundtripKind | 对于包含时区信息的字符串,尝试阻止将日期和时间字符串 DateTime 转换为其 Kind 属性设置为 DateTimeKind.Local的值。 通常,此类字符串是使用“o”、“r”或“u”标准格式说明符调用 DateTime.ToString(String) 方法创建的。 |
如果 s
不包含时区信息,则 DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 该方法将返回 DateTime 其 Kind 属性为 DateTimeKind.Unspecified 的值,除非 styles
标志指示否则。 如果 s
包括时区或时区偏移信息,该方法 DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 将执行任何必要的时间转换,并返回下列值之一:
- 其 DateTime 日期和时间反映本地时间及其 Kind 属性的值 DateTimeKind.Local。
- 或者,如果
styles
包含 AdjustToUniversal 标志, DateTime 则表示其日期和时间反映 UTC 及其 Kind 属性的值 DateTimeKind.Utc。
可以使用标志重写 DateTimeStyles.RoundtripKind 此行为。
分析自定义区域性
如果分析为自定义区域性生成的日期和时间字符串,请使用 TryParseExact 该方法而不是 TryParse 方法来提高分析操作成功的可能性。 自定义区域性日期和时间字符串可能复杂且难以分析。 该方法 TryParse 尝试分析具有多个隐式分析模式的字符串,所有这些模式都可能失败。 相反,该方法 TryParseExact 要求显式指定一个或多个可能成功的确切分析模式。
有关自定义区域性的详细信息,请参阅该 System.Globalization.CultureAndRegionInfoBuilder 类。