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

如果我们使用ParseExact方法来使用指定的格式进行精确的date时间parsing,为什么我们需要提供一个IFormatProvider对象? 它背后有什么意思?

例如:

 DateTime.ParseExact(dateString, format, provider); 

为什么我们需要这里的provider

为什么我们需要提供一个IFormatProvider对象? 它背后有什么意思?

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

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

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

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

在与美国文化的分析中,使用了公历,而在用沙特阿拉伯文化进行parsing时,则使用了“古兰经”历法,那里是我们目前所在的1434年(正如我写下这个答案)。