Ответ 1
почему нам нужно предоставить объект 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 - это год, в котором мы сейчас находимся (как я пишу этот ответ).