为什么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年(正如我写下这个答案)。