Date.TryParseExact - 用于提供者参数的是什么?

And*_*rew 1 .net asp.net parsing

Date.TryParse的方法签名是:

Public Shared Function TryParseExact ( _
    s As String, _
    format As String, _
    provider As IFormatProvider, _
    style As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTime _
) As Boolean
Run Code Online (Sandbox Code Playgroud)

我理解什么格式,但是什么是提供者参数?我知道您传入了CultureInfo实例,但我不确定它的用途是什么.

有谁能请赐教?

Ahm*_*eed 8

提供程序指定有关日期的特定于区域性的格式信息.

例如,您可以传递任何这些文化:

new CultureInfo("en-US")  // USA
new CultureInfo("fr-FR")  // France
new CultureInfo("it-IT")  // Italy
new CultureInfo("de-DE")  // Germany
Run Code Online (Sandbox Code Playgroud)

并且您将根据这些文化格式化日期,例如:

  • en-US:6/1/2009 4:37:00 PM
  • fr-FR:01/06/2009 16:37:00
  • it-IT:01/06/2009 16.37.00
  • de-DE:01.06.2009 16:37:00

另一个例子:使用"d"格式,表示使用en-US进行CultureInfo时的M/d/yyyy短日期模式,请考虑:

DateTime dateValue;
string[] sampleDates = new[] { "31/8/2009", "8/31/2009" };
foreach (string currentDate in sampleDates)
{
    bool result = DateTime.TryParseExact(currentDate, new[] {"d"}, 
                    new CultureInfo("en-US"), 
                    DateTimeStyles.None, 
                    out dateValue);
    Console.WriteLine("{0}: {1}", currentDate, result ? "valid" : "invalid");
    if (result)
    {
        Console.WriteLine("Result: {0}", dateValue);
    }
    Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

输出:

31/8/2009: invalid

8/31/2009: valid
Result: 8/31/2009 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)

31/8/2009无效,因为它不符合M/d/yyyy的en-US文化格式,而8/31/2009是有效的,因为它确实有效.