为什么DateTime.ParseExact(String,String,IFormatProvider)需要IFormatProvider?

时间:2013-09-23 14:13:17

标签: c# datetime iformatprovider

如果我们使用ParseExact方法对 完全 日期时间使用指定格式进行解析,为什么我们需要提供IFormatProvider对象?它背后的意义是什么?

例如:

DateTime.ParseExact(dateString, format, provider);

为什么我们需要provider

1 个答案:

答案 0 :(得分:57)

  

为什么我们需要提供IFormatProvider对象?它背后的意义是什么?

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

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

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

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是我们目前所在的年份(因为我写这个答案)