2009-03-05 3 views
4

Я написал приложение asp.net, и одна из моих процедур обратной передачи просто сохраняет данные, предоставленные пользователем, в sql 2005 db. Все работает отлично на моей машине разработки, но когда я развертываю на сайт, я получаю недопустимые даты из моей проверки даты синтаксического анализа.C# и проблемы с культурой даты

В принципе, он ожидает формат даты на американском языке, но это не то, что я хочу. Пользователь должен иметь возможность вводить формат dd/MM/yyyy. Таким образом, действительная дата, например 21/10/2009, возвращает ошибки на реальном сервере, но не на моей машине dev. Ниже приведен код, который генерирует исключение.

DateTime dt; 
dt = DateTime.Parse(sdate); 
//sdate in GB dd/MM/yyyy format 

Можно ли заставить процедуру разбора ожидать дату в формате dd/MM/yyyy?

ответ

9

Делай так:

System.Globalization.CultureInfo cultureinfo = 
     new System.Globalization.CultureInfo("en-gb"); 
    DateTime dt = DateTime.Parse("13/12/2009", cultureinfo); 
+0

Как насчет того, что вы поставили «12/12/9999» в теории, это действительная дата, но с человеческой точки зрения это недействительно, поэтому код, который вы там разместили, никогда не завершится с датой, когда в этом году 2012 год. «Никогда не достигал DateTime.MaxValue из 9999 – MethodMan

6

Вы можете использовать DateTime.ParseExact, чтобы указать ожидаемый формат.

+0

... или более чем один ... –

4

Другой вариант заключается в определении культуры, который вы хотите использовать в файле web.config:

<system.web> 
    ... 
    <globalization 
     culture="da-DK" 
     uiCulture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" 
    /> 
</system.web> 
+0

+1 за этот полезный совет! – user65439

2

Да, ParseExact будет делать, что, как упомянуто Мэтта ,

Код будет что-то вроде:

dt = DateTime.ParseExact(sdate, "dd/MM/yyyy", CultureInfo.InvariantCulture); 
Смежные вопросы