C# DateTime.TryParse(明确)识别哪些格式?
我指的是C# DateTime.TryParse(明确)识别哪些格式?,c#,.net,datetime,C#,.net,Datetime,我指的是DateTime.TryParse(string s,out DateTime result)重载,它试图从字符串解析DateTime,而不指定特定的格式 从中可以看出,该方法使用DateTimeFormatInfo(源自控制面板设置),并且不需要时间,等等 然而,我如何知道它目前和/或将来是否会识别,例如,以下内容 2014年5月13日 2014年5月13日 2014年5月13日 13-05-2014 5月13日至14日 (不是详尽的列表,只是几个例子) 我已经查看了该方法的源代码
DateTime.TryParse(string s,out DateTime result)
重载,它试图从字符串解析DateTime
,而不指定特定的格式
从中可以看出,该方法使用DateTimeFormatInfo
(源自控制面板设置),并且不需要时间,等等
然而,我如何知道它目前和/或将来是否会识别,例如,以下内容
- 2014年5月13日
- 2014年5月13日
- 2014年5月13日
- 13-05-2014
- 5月13日至14日
我可以从文档中看到,“…因为DateTime.TryParse(String,DateTime)方法尝试使用当前区域性的格式规则解析日期和时间的字符串表示形式…”-MSDN中是否有其他地方列出了有效的潜在表示形式,或者哪一类定义了它们我能找到的最接近的东西是:
请注意,使用区域性敏感度是为了让您可以将应用程序部署到世界上的任何区域性/地区,如果他们以该区域性的预期格式输入日期,则可以“通用解析”。目标是让您能够处理来自多个区域性的输入,而不是专门针对特定区域性和格式的代码(就像您在这里可能正在做的那样)。我想您正在寻找这一点 在现实生活中,如果需要知道哪些值失败,请记录任何失败的TryParse的值 无法发布,因为它属于我的公司,但我编写了一个程序从文本中提取日期,然后解析日期。我编写regex来提取这些EN或FR模式的日期。有些日期对我来说是有效的GetAllDateTimePatterns,但没有进行解析。: 要分析的字符串可以采用以下任何形式:
- 包含日期和时间组件的字符串
- 包含日期但不包含时间组件的字符串。如果没有时间分量,则该方法假定午夜12:00。如果日期组件具有两位数的年份,则会根据当前区域性的当前日历或指定区域性的当前日历的
将其转换为年份(如果使用带非空提供程序参数的重载)日历.TwoDigitYearMax
- 包含时间但不包含日期组件的字符串。除非调用
重载并在styles参数中包含Parse(String,IFormatProvider,DateTimeStyles)
,否则该方法假定当前日期,在这种情况下,该方法假定为0001年1月1日DateTimeStyles.NoCurrentDateDefault
- 包含时区信息并符合ISO 8601的字符串。在以下示例中,第一个字符串表示协调世界时(UTC),第二个字符串表示时区中比UTC早7小时的时间:
2008-11-01T19:35:00.0000000Z 2008-11-01T19:35:00.0000000-07:00
- 包含GMT指示符并符合RFC 1123时间格式的字符串;例如:
string[] p = CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns();
Sat,2008年11月1日19:35:00格林威治标准时间
- 包含日期和时间以及时区偏移信息的字符串;例如:
string[] p = CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns();
03/01/2009 05:42:00-5:00
Parse
编写的,但它们也适用于TryParse
。由于DateTime.Parse
的文档有更多的细节,您可能会认为Parse
是主要的方法,而TryParse
是围绕Parse的包装,但实际上,情况正好相反Parse
包装TryParse
并在收到false
时抛出异常
当这些文档提到“日期组件”或“时间组件”时,它们具体指的是传递给IFormatProvider
参数的DateTimeFormatInfo
对象提供的格式之一,或从传递的CultureInfo
派生的格式之一,或者,如果未提供,则从CurrentCulture
如果您想知道特定DateTimeFormatInfo
对象的所有格式,那么可以使用。例如:
string[] p = CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns();
作为具体示例,请考虑:
var dtfi = CultureInfo.CreateSpecificCulture("en-GB").DateTimeFormat;
foreach (string pattern in dtfi.GetAllDateTimePatterns())
{
Debug.WriteLine(pattern);
}
其输出如下:
dd/MM/yyyy
年月日
年月日
d、 M.yy
每天
年月日
年月日
dddd,d MMMM yyyy
dddd,dd-MMMM-yyyy
dd-MMMM-yyy-HH:mm
dd-MMMM-yyyy H:mm
dd MMMM yyyy hh:mm tt
dd MMMM yyyy h:mm tt
d MMMM yyy HH:mm
d-MMMM-yyy-H:mm
d mm yyyy hh:mm tt
d mm yyyy h:mm tt
dddd,d-MMMM-yyy-HH:mm
dddd,d MMMM yyyy H:mm
dddd,d MMMM yyyy hh:mm tt
dddd,d MMMM yyyy h:mm tt
dddd,dd-MMMM-yyy-HH:mm
dddd,dd-MMMM-yyyy H:mm
dddd,dd-MMMM-yyyy-hh:mm-tt
dddd,dd-MMMM-yyyy h:mm-tt
dd-MMMM-yyyy-HH:mm:ss
dd-MMMM-yyyy H:mm:ss
dd MMMM yyyy hh:mm:ss tt
dd MMMM yyyy h:mm:ss tt
d MMMM yyy HH:mm:ss
d MMMM yyy H:mm:ss
d MMMM yyyy hh:mm:ss tt
d MMMM yyyy h:mm:ss tt
dddd,d MMMM yyyy HH:mm:ss
dddd,d MMMM yyyy H:mm:ss
dddd,d MMMM yyyy hh:mm:ss tt
dddd,d MMMM yyyy h:mm:ss tt
dddd,dd-MMMM-yyyy-HH:mm:ss
dddd,dd-MMMM-yyyy H:mm:ss
dddd,dd-MMMM-yyyy-hh:mm:ss-tt
dddd,dd-MMMM-yyyy h:mm:ss tt
年月日HH:MM
年月日H:MM
年月日hh:MM tt
年月日h:MM tt
年月日HH:MM
年月日:年月日
年月日hh:MM tt
年月日:年月日
年月日小时:毫米
年月日高:毫米
年月日时分:年月日时分
年月日时长:毫米tt
d、 M.yy HH:mm
d、 M.yy H:mm
d、 M.yy hh:mm tt
d、 M.yy h:mm tt
yyyy MM dd HH:MM
yyyy MM dd H:MM
yyyy-MM-dd hh:MM tt
yyyy MM dd h:MM tt
年月日HH:MM:ss
年月日H:MM:ss
年月日hh:MM:ss tt
年月日h:MM:ss tt
年月日HH:MM:ss
年月日H:MM:ss
年月日hh:MM:ss tt
年月日h:MM:ss tt
年月日小时:毫米:秒
年月日