Анализ точных дат в C # не должен заставлять вас создавать IFormatProvider
-
09-06-2019 - |
Вопрос
Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь, но анализ дат в формате гггг / ММ / дд (или других конкретных форматах) на C# следует быть таким же простым, как
DateTime.ParseExact(theDate, "yyyy/MM/dd");
но нет, C # заставляет вас создавать IFormatProvider.
Есть ли удобный способ настройки app.config, чтобы мне не нужно было делать это каждый раз?
DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true));
Решение
Аргумент IFormatProvider может быть равен null.
Другие советы
ParseExact нуждается в культуре :рассмотрим "гггг МММ дд".MMM - это локализованное название месяца, использующее текущую культуру.
Используйте текущую культуру приложения:
DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture);
Вы можете настроить культуру приложения в app.config, используя тег Globalization.Я думаю.
Создайте метод расширения:
public static DateTime ParseExactDateTime(this string dateString, string formatString) {
return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true));
}
Для определения конкретных символов и строк даты и времени (например, названий дней недели на определенном языке) требуется поставщик формата.Вы можете использовать значение null, и в этом случае используется объект CultureInfo, соответствующий текущему языку.
Если вы не хотите указывать это каждый раз, создайте метод расширения, который либо передает null, либо CultureInfo ("en-CA", true) в качестве поставщика формата.
Вы также можете просто создать IFormatProvider один раз и сохранить его для последующего использования.
Вы также могли бы использовать класс Convert
Convert.ToDateTime("2008/11/25");
//Преобразовать дату в формат, совместимый с MySQL
DateTime Значение даты = Преобразовать.Текущее время (datetimepicker.text);
строка datevalue = значение даты.toString("гггг-ММ-дд");
Что плохого в использовании Globalization.CultureInfo.InvariantCulture ?