57

如果我们使用指定格式的精确ParseExact日期时间解析方法,为什么我们需要提供一个 IFormatProvider 对象?它背后的意义何在?

例如:

DateTime.ParseExact(dateString, format, provider);

为什么我们需要provider这里?

4

1 回答 1

68

为什么我们需要提供一个 IFormatProvider 对象?它背后的意义何在?

它允许特定于文化的选项。尤其是:

  • 您使用的格式可以是标准的日期/时间格式,这意味着不同文化中的不同模式
  • 您可以在您的模式中使用:or /,这分别表示时间分隔符或日期分隔符的文化特定字符
  • 在解析月份和日期名称时,这些显然取决于文化
  • 文化也决定了默认日历,这将影响结果

作为最后一点的示例,请考虑在美国或沙特阿拉伯的文化中解释的完全相同的字符串和格式:

using System;
using System.Globalization;

class Test
{
    static void Main()        
    {
        CultureInfo us = new CultureInfo("en-US");
        CultureInfo sa = new CultureInfo("ar-SA");
        string text = "1434-09-23T15:16";
        string format = "yyyy'-'MM'-'dd'T'HH':'mm";
        Console.WriteLine(DateTime.ParseExact(text, format, us));
        Console.WriteLine(DateTime.ParseExact(text, format, sa));
    }
} 

解析美国文化时,使用公历 - 而解析沙特阿拉伯文化时,使用 Um Al Qura 日历,其中 1434 是我们当前所在的年份(正如我写这个答案时)。

于 2013-09-23T14:15:59.977 回答