2015-02-13 4 views
1

Я выполняю набор процессов как асинхронный в C#. Когда я пытаюсь преобразовать строку («12/02/2015») в тип datetime, она показывает, что ошибка, вызванная String, не в правильном формате для преобразования. Но тот же код работал до того, как он стал асинхронным процессом.Преобразование DateTime во время асинхронного процесса

DateTime.Parse("12/02/2015 00:00:00") 
+0

Может _asynchronous process_ изменил 'CurrentCulture' настройки? Какова ваша «Текущая культура»? Покажите рабочий код. Но я не думаю, что процесс _type_ может изменить поведение 'DateTime.Parse' для вашей строки. –

+0

Вы можете попробовать 'ParseExact' метод –

ответ

3

Когда вы начинаете новый поток, по умолчанию его языковой стандарт будет установлен на локаль операционной системы по умолчанию. Он будет не обязательно должен быть настроен на культуру, выбранную в региональных настройках Windows.

Вы можете это исправить, добавив следующую строку кода в начале вашей функции потока:

System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture; 

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

DateTime.ParseExact("12/02/2015 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

Обратите внимание, что символы «/» и «:» в строке формата не являются стенографическими символами; они определяют соответственно разделители даты и времени. Они, случается, сопоставляются с теми же символами в инвариантной культуре, но они могут отображаться для разных персонажей в других культурах.

Чтобы указать, что именно эти «/» и «:» символы должны быть использованы, вы должны избавиться от них, как так:

DateTime.ParseExact("12/02/2015 00:00:00", "dd\\/MM\\/yyyy HH\\:mm\\:ss", CultureInfo.InvariantCulture); 
+0

Но все же я получаю ту же ошибку. DateTime appDate = DateTime.ParseExact («12/02/2015 00:00:00», «dd/MM/yyyy», CultureInfo.InvariantCulture); – Geeth

+0

@Nathiya Посмотрите на строку формата, которую вы используете, а затем посмотрите на ту, которую я использовал. Они не одинаковы. Вы не указали бит «HH: mm: ss». –