2016-03-12 3 views
3

У меня есть строка:Почему не работает DateTime.ParseExact для этого примера за пределами США?

var stringDate = "8/19/2016 5:00:00 PM" 

и я стараюсь с помощью:

var dateTime = DateTime.ParseExact(stringDate,"M/d/yyyy h:mm:ss tt", null); 

или

var dateTime = DateTime.ParseExact(stringDate, "M/d/yyyy h:mm:ss tt", 
            CultureInfo.Invariant); 

или

var dateTime = DateTime.ParseExact(stringDate,"M/d/yyyy h:mm:ss tt", 
            CultureInfo.GetCultureInfo("en-us")); 

Он отлично работает, если машина находится в США, но и для всех l 3 варианта. Я получаю следующую ошибку при работе с машиной в Лондоне:

String was not recognized as a valid DateTime

Что мне здесь не хватает?

ответ

8

Насколько я могу судить, вам нужно использовать h specifier вместо hh specifier, так как ваша часовая часть не имеет начального нуля для однозначных значений.

var stringDate = "8/19/2016 5:00:00 PM"; 
var dateTime = DateTime.ParseExact(stringDate, "M/d/yyyy h:mm:ss tt", 
            CultureInfo.InvariantCulture); 

enter image description here

Кроме того, я хотел бы предложить использовать конкретные настройки культуры вместо null для любого случая. В вашем примере, поскольку null означает CurrentCulture настройки для DateTime методов анализа, настройки CurrentCulture;

Для тех, что ваш метод ParseExact бросает исключение даже если ваша строка и формат идеально соответствует.

+0

Так что этот код работает отлично, когда я запускаю его на сервере в США (так что он определенно фиксировал часть проблемы), но если я запускаю тот же код с той же строкой на машине в Лондоне, и я все еще получаю такая же ошибка: String не была признана действительной DateTime – leora

+0

@leora Используете ли вы 'InvariantCulture' в своем коде или' null' или 'CurrentCulture'? Если вы используете 'InvariantCulture', это не должно быть никакой ошибкой. Что такое «CurrentCulture» машины в Лондоне, например? –

+0

Это то, что я использую (это не работает) var value = DateTime.ParseExact (StartDateTime, "M/d/yyyy h: mm: ss tt", CultureInfo.InvariantCulture); Как узнать «текущую культуру» машины? – leora