Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь, но разбор дат yyyy / MM / dd (или других конкретных форматов) в C# должен будет таким же простым, как
DateTime.ParseExact(theDate, "yyyy/MM/dd");
но нет, C# заставляет вас создавать IFormatProvider.
Есть ли удобный способ настройки app.config, чтобы мне не приходилось делать это каждый раз?
DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true));





Аргумент IFormatProvider может иметь значение NULL.
Я понимаю, что не должен был подразумевать, что нужно использовать app.config. Вы получили то, что я хотел - просто проанализируйте дату и не беспокойте меня вещами, которые меня не волнуют. Спасибо.
Создайте метод расширения:
public static DateTime ParseExactDateTime(this string dateString, string formatString) {
return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true));
}
Спасибо, Уилл. Я не очень хорошо думал об этом.
Используйте текущую культуру приложения:
DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture);
Вы можете установить культуру приложения в app.config с помощью тега Globalization. Я думаю.
Вы также можете просто создать IFormatProvider один раз и сохранить его для дальнейшего использования.
Вы также можете использовать класс Convert
Convert.ToDateTime("2008/11/25");
ParseExact нуждается в культуре: рассмотрите «гггг МММ дд». MMM будет локализованным названием месяца, использующим текущую культуру.
Для определения конкретных символов и строк даты и времени (например, названий дней недели на определенном языке) требуется поставщик формата. Вы можете использовать значение NULL, и в этом случае используется объект CultureInfo, соответствующий текущей культуре.
Если вы не хотите указывать его каждый раз, создайте метод расширения, который либо передает значение null, либо CultureInfo ("en-CA", true) в качестве поставщика формата.
// Преобразование даты в формат, совместимый с MySql
DateTime DateValue = Convert.ToDateTime (datetimepicker.text);
строка datevalue = DateValue.ToString ("гггг-ММ-дд");
Что плохого в использовании Globalization.CultureInfo.InvariantCulture?
Ничего, просто не хочу засорять мой код им, так как глобализация не является проблемой в нашем магазине.
Из документов MSDN: «Если поставщик является пустой ссылкой (Nothing в Visual Basic), используется объект CultureInfo, соответствующий текущему языку и региональным параметрам».