Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.TryParse(明确)识别哪些格式?_C#_.net_Datetime - Fatal编程技术网

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日
(不是详尽的列表,只是几个例子)

我已经查看了该方法的源代码,但是通过反向工程从核心.NET方法中找出预期结果似乎并不正确


我可以从文档中看到,“…因为DateTime.TryParse(String,DateTime)方法尝试使用当前区域性的格式规则解析日期和时间的字符串表示形式…”-MSDN中是否有其他地方列出了有效的潜在表示形式,或者哪一类定义了它们

我能找到的最接近的东西是:


请注意,使用区域性敏感度是为了让您可以将应用程序部署到世界上的任何区域性/地区,如果他们以该区域性的预期格式输入日期,则可以“通用解析”。目标是让您能够处理来自多个区域性的输入,而不是专门针对特定区域性和格式的代码(就像您在这里可能正在做的那样)。

我想您正在寻找这一点

在现实生活中,如果需要知道哪些值失败,请记录任何失败的TryParse的值

无法发布,因为它属于我的公司,但我编写了一个程序从文本中提取日期,然后解析日期。我编写regex来提取这些EN或FR模式的日期。有些日期对我来说是有效的GetAllDateTimePatterns,但没有进行解析。

:

要分析的字符串可以采用以下任何形式:

  • 包含日期和时间组件的字符串

  • 包含日期但不包含时间组件的字符串。如果没有时间分量,则该方法假定午夜12:00。如果日期组件具有两位数的年份,则会根据当前区域性的当前日历或指定区域性的当前日历的
    日历.TwoDigitYearMax
    将其转换为年份(如果使用带非空提供程序参数的重载)

  • 包含时间但不包含日期组件的字符串。除非调用
    Parse(String,IFormatProvider,DateTimeStyles)
    重载并在styles参数中包含
    DateTimeStyles.NoCurrentDateDefault
    ,否则该方法假定当前日期,在这种情况下,该方法假定为0001年1月1日

  • 包含时区信息并符合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
年月日小时:毫米:秒
年月日