2016-03-02 13 views
-1

Нам нужно преобразовать системную дату в соответствующий формат в соответствии с конкретной культурой. Мы наблюдаем странное поведение, в котором мы не можем преобразовать DateTime только в марте для культуры Италии.Vb.Net не в состоянии конвертировать DateTime только за один месяц в марте для Италии Культура

Try 

     Dim dt As String = "01-Mar-2016" 
     Dim culture As New CultureInfo("it-IT") 

     MsgBox(Convert.ToDateTime(dt, culture).ToShortDateString) 

    Catch ex As Exception 

     MsgBox(ex.ToString) 

    End Try 

Приведенный выше код работает за январь, февраль, май, май, июнь, июль, август, сентябрь, октябрь, ноябрь & Дек, но не только март Это любой существующий ошибка в Windows, ..?

PS: Вышеприведенный код генерирует исключение «String не был признан действительным DateTime», но отлично работает, когда мы меняем дату как «01 марта 2016 года».

+0

Он отлично работает при разборе: 'DateTime.ParseExact (DT, "дд-MMM-YYYY", культура) .ToShortDateString()' – Plutonix

+0

Привет @Plutonix, Спасибо за информацию. Я проверю его. Но есть ли какая-то причина, почему вышеупомянутая логика должна потерпеть неудачу только для Мар для Италии ..? – user3138788

+0

Строго говоря, это не соответствует действительности для Италии. У них есть 'd-MMM-yy' и' d MMMM yyyy', но это не совсем то же самое, поэтому синтаксический анализ более подходит, чем конвертирование. [NetFiddle действительных форматов] (https://dotnetfiddle.net/WImdZ7) – Plutonix

ответ

0

У меня ошибка при использовании .NET 4.0, но она работает с 4.5. И в 4.0 он не работает как для DateTime.Parse, так и для Convert.ToDateTime. Я читал, что последний называет первым. Кажется, это подтверждает это. Поэтому, видимо, они поняли проблему и исправили ее.

Почему только Мар? Это единственная аббревиатура как для месяца, так и для дня (вторник) на итальянском языке.

0

Простое и быстрое решение ...

fecha_temp = CDate(fecha_ant.Replace(" Mar ", " March "))