DateTime.Parse, настройки латышской культуры - PullRequest
0 голосов
/ 01 декабря 2010

Я отправляю строку в формате dd/MM/yyyy, который затем анализируется в культуре lv-LV в соответствии с настройкой глобализации web.config.

Затем я сравниваю дату с DateTime.Now, чтобы узнать, не было ли это в прошлом.

Проблема в том, что DateTime.Parse преобразует мою строку в формат dd.MM.yyyy, но DateTime.Now имеет формат MM.dd.yyyy, поэтому сравнение всегда заканчивается неудачей.

Почему DateTime.Now отличается от вывода из DateTime.Parse в той же культуре потоков?

Спасибо!

(Обновление) Это код, который я использую:

InputText содержит ввод из формы в формате ДД.ММ.ГГГГ

DateTime date = DateTime.Parse(InputText, CultureInfo.CurrentCulture);
// Check it's not in the past
this.IsValid = (date.CompareTo(DateTime.Now) > 0);

[DateTime.Now] в этом контексте в формате MM.DD.YYYY с использованием lv-LV cultureInfo [дата] в формате ДД.ММ.ГГГГ после даты / времени.Парс

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

A DateTime не имеет форматирования - это просто момент времени.

Если вы просматриваете его, это означает, что вы выводите его. Используйте правильную культуру для вывода даты.

DateTime.ToString имеет перегрузки, которые принимают поставщик формата, такой как CultureInfo:

string formatted = DateTime.ToString(new CultureInfo("lv-LV"));

Если не указано (в коде или конфигурации), будет использоваться системная культура по умолчанию (или CultureInfo.InvariantCulture, в некоторых случаях).

1 голос
/ 01 декабря 2010

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

DateTime myDate = DateTime.Parse(myDateAsString);//with the correct locale to ensure it's correctly parsed
if (myDate < DateTime.Now)
{
  //it's in the past
}
...