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

时间:2009-09-03 06:13:45

标签: .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

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

任何人都可以开导我吗?

3 个答案:

答案 0 :(得分:8)

提供者指定有关日期的特定于文化的格式信息。

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

new CultureInfo("en-US")  // USA
new CultureInfo("fr-FR")  // France
new CultureInfo("it-IT")  // Italy
new CultureInfo("de-DE")  // Germany

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

  • 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();
}

输出:

31/8/2009: invalid

8/31/2009: valid
Result: 8/31/2009 12:00:00 AM

2009年8月31日无效,因为它不符合M / d / yyyy的美国文化格式,而8/31/2009是有效的,因为它确实有效。

答案 1 :(得分:1)

IFormatProvider是一个知道如何格式化某事的类。 TryParseExact需要询问它(在本例中具体为CultureInfo),以查看字符串中是否存在任何特定的特定于文化的符号,例如星期几,上午/下午等。

此外,如果您只是将格式作为标准c#日期格式说明符之一传递,则必须咨询格式提供程序,以确定为给定文化准确转换的内容。

答案 2 :(得分:0)

世界各地的日期各不相同,无论是格式还是使用数月。 IFormatProviders了解这一点。