2012-08-31 3 views

ответ

4

В custom date format string, / обозначает культуру конкретного разделителя даты, а не буквальный характер /. Таким образом, результат вашего кода зависит от настроек локализации пользователя (или сервера).

Чтобы сделать код независимо от настроек культуры конкретной, у вас есть два варианта:

  • Явный определяет культуру, которая использует косую черту в качестве разделителя даты, например,

    DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", 
            CultureInfo.InvariantCulture) 
    
  • или избежать символа, например.

    DateTime.ParseExact(txtTourStartDate.Text, @"dd\/MM\/yyyy", null) 
    

    (обратите внимание на @и\).

Оба должны принести желаемый результат.

+0

благодарит свои работы за меня ... – rahularyansharma

2

Этого будет достаточно:

objTour.tourStartDate = DateTime.ParseExact(txtTourStartDate.Text, 
              "dd/MM/yyyy", 
              CultureInfo.InvariantCulture); 
+0

OMG, я просто понял, что делает этот парень (Разобрать -> ToString -> ToDateTime). Вы правы, конечно, +1. Тем не менее, я сохраню свой ответ здесь, так как не избегает '/' is * другой * вещи, что он делает неправильно. – Heinzi

+0

Когда я увидел этот вопрос, мне действительно пришлось задаться вопросом, как он так поступает. – nunespascal

2

Ваш оригинальный код работает, хотя вы делаете много ненужных преобразований. (DateTime -> ToString -> ToDateTime), настоящий номер есть InvariantCulture. Поскольку вы проходите null за CultureInfo, попробуйте CultureInfo.InvariantCulture.

Ваш оригинальный код:

objTour.tourStartDate = 
    Convert.ToDateTime(
     DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture) 
      .ToString("MM/dd/yyyy")); 

Лучше один может быть:

objTour.tourStartDate = 
DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)