2014-12-01 3 views
-1

Я использую метод Parse для преобразования string в DateTime объекта:DateTime.Parse() работает на одной машине, но не другой

requestRecord.TerminationDate = DateTime.Parse(reader.ReadString("Termination_Date")); 

Этот код работает на одной машине, но бросает исключение на другой. Я думаю, что проблема может быть связана с местной культурой. Глядя на панели задач на двух машинах, тот, который выбрасывает исключение, имеет дату 01/12/2014, а другой показывает 12/01/2014.

Есть ли способ, которым я могу переписать вышеуказанный код, чтобы он работал на обеих машинах независимо от местной культуры DateTime?

+2

Что такое «читатель»? и почему вы читаете его как строку на первом месте? –

+1

@SriramSakthivel, возможно потому, что 'BinaryReader' не имеет метода ReadDate()'? –

+1

@KirkWoll Как вы уверены, что читатель является «BinaryReader»? [BinaryReader.ReadString] (http://msdn.microsoft.com/en-us/library/system.io.binaryreader.readstring%28v=vs.110%29.aspx) не принимает ни одного строкового параметра. –

ответ

8

Я полагаю, что настройки культуры различаются на обеих машинах. Попробуйте указать формат. Это объясняет, почему формат даты интерпретируется по-разному на обеих машинах:

requestRecord.TerminationDate = DateTime.ParseExact 
           (reader.ReadString("Termination_Date") 
           , "dd/MM/yyyy" 
           , CultureInfo.InvariantCulture 
           ); 

Таким образом, вы не в зависимости от машины, и это настройки, но формат, который вы знаете.

В зависимости от того, что reader есть, вы можете использовать reader.GetDateTime, который делает все это для вас уже, например SqlDataReader.GetDateTime.

+0

Это будет по-прежнему терпеть неудачу на машине, использующей культуру США. Он читает локально отформатированную дату, поэтому попытка заставить InvariantCulture не поможет здесь ... – toadflakz

+0

@toadflakz: OP не говорит, что это 'DateTime' из базы данных или так он читает, просто' string '. Ответ и обеспечивает исправление кода, как долгосрочное лучшее решение, если это применимо. –

+1

Это совершенно неправильно. 'ParseExact' требует * точного соответствия *, поэтому не вижу, как это будет работать в многоформатных случаях. Попробуйте 'ParseExact' над MM/dd/yyyy и dd/MM/yyyy ... – Tigran

Смежные вопросы