Разбор точных дат в C # не должен заставлять вас создавать IFormatProvider - PullRequest
5 голосов
/ 15 сентября 2008

Кто-то, пожалуйста, поправьте меня, если я ошибаюсь, но синтаксический анализ дат гггг / мм / дд (или других определенных форматов) в C # должен быть таким же простым, как

DateTime.ParseExact(theDate, "yyyy/MM/dd");

но нет, C # заставляет вас создавать IFormatProvider.

Есть ли в app.config дружественный способ установить это, чтобы мне не приходилось делать это каждый раз?

DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true));

Ответы [ 9 ]

14 голосов
/ 15 сентября 2008

Аргумент IFormatProvider может быть нулевым.

6 голосов
/ 15 сентября 2008

ParseExact нужна культура: рассмотрим "гггг МММ дд". MMM будет локализованным названием месяца, в котором используется текущая культура.

5 голосов
/ 15 сентября 2008

Использовать текущую культуру приложения:

DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture);

Вы можете установить культуру приложения в app.config, используя тег Globalization. Я думаю.

3 голосов
/ 15 сентября 2008

Требуется поставщик формата, чтобы определить конкретные символы и строки даты и времени (например, названия дней недели на определенном языке). Вы можете использовать значение null, в этом случае используется объект CultureInfo, соответствующий текущей культуре.

Если вы не хотите указывать его каждый раз, создайте метод расширения, который либо передает null, либо CultureInfo ("en-CA", true) в качестве поставщика формата.

3 голосов
/ 15 сентября 2008

Создать метод расширения:

public static DateTime ParseExactDateTime(this string dateString, string formatString) {
    return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true));
}
1 голос
/ 15 сентября 2008

Вы также можете использовать класс Convert

Convert.ToDateTime("2008/11/25");
1 голос
/ 15 сентября 2008

Вы также можете просто создать IFormatProvider один раз и сохранить его для дальнейшего использования.

0 голосов
/ 02 марта 2010

Что не так с использованием Globalization.CultureInfo.InvariantCulture?

0 голосов
/ 07 января 2009

// Преобразование даты в MySql-совместимый формат

DateTime DateValue = Convert.ToDateTime (datetimepicker.text);

строка datevalue = DateValue.ToString ("гггг-ММ-дд");

...