2015-02-23 2 views
-1

Прежде чем я начну объяснять, мне нужно сказать, что я пробовал все возможные решения этой проблемы, которые предусмотрены в stackoverflow. Но не работает в окнах 7.Обработчик DateTime не работает в Windows 7: строка не была признана действительной DateTime

В Windows 7 синтаксический анализ datetime не работает. я попытался следующие фрагменты кода

DateTime.ParseExact(arr[TransactionDateIndex], "M/dd/yyyy h:mm:ss tt", null); 
DateTime.ParseExact(arr[TransactionDateIndex], "M/d/yyyy h:mm:ss tt",CultureInfo.InvariantCulture); 
DateTime.Parse(DateTime.Parse(arr[TransactionDateIndex]).ToString("M/d/yyyy h:mm:ss tt"),CultureInfo.InvariantCulture); 

У меня есть входной файл, который имеет столбец даты транзакции, и она может быть в любом допустимом формате дата-время, прямо сейчас в файле его (MM/DD/YYYY), который мне нужно преобразовать в формат «M/d/yyyy h: mm: ss tt».
При работе в XP этот код работает нормально, но в Windows 7 даже после попытки ParseExact показать ошибку.
Даже если я использую

if (DateTime.TryParse(input, out dateTime)) 
{ 
} 

Во время работы в Windows 7, несколько записей будут рассматриваться как недействительные, но одни и те же вещи будут обработаны в XP.

+1

В DateTime разобрать точным вы предоставите формат, который вы хотите, чтобы разобрать не формат, который вы хотите, чтобы разобрать в. –

+1

Не видя входных данных, которые терпят неудачу, я не могу сказать здесь. –

+0

Однако также работает «yyyy-MM-dd». –

ответ

0

Если г текущий формат даты и времени является MM/dd/yyyy , то вы должны использовать в качестве

string dateString = "02/15/2015" 
    DateTime dateValue = DateTime.ParseExact(dateString , "MM/dd/yyyy", CultureInfo.InvariantCulture); 

И если вы хотите, чтобы преобразовать его в другой формат, как вы упомянули M/d/yyyy h:mm:ss tt, то вы можете добавить .Tostring('M/d/yyyy h:mm:ss tt') даты.

Как только вы узнали о своем вопросе еще раз, когда вы упомянули, что может быть в любом действительном формате даты и времени, если это так, и если ваша культураInfo исправлена.

Вы можете использовать что-то вроде следующего, но помните, что более одного формата может анализировать одну и ту же дату. Например, 10/11/12 можно проанализировать как yyyy/MM/dd или MM/dd/yyyy, которые являются действительными форматами даты в США. MM/dd/yyyy более распространен, поэтому он появляется первым в списке и является тем, который возвращается кодом ниже (если вы используете его в культуре США вместо культуры в примере).

string testValue = "02/15/2015"; 

DateTime result; 
CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI"); 
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns(); 
Console.WriteLine(String.Join("\r\n", fmts)); 
if (DateTime.TryParseExact(testValue, fmts, ci, DateTimeStyles.AssumeLocal, out result)) { 
     Console.WriteLine(result.ToLongDateString()); 
} 

И если CultureInfo также не фиксирован, то вы должны извлечь все доступные контркультуры, а затем получить все форматы из них, а затем анализировать время и даты.

+0

Я даже попытался сначала разобрать строку с действительным дат-временем, скажем _ «MM/dd/yyyy» _ с «Datetime».ParseExact ', а затем преобразовать его в «M/dd/yyyy h: mm: ss tt» _, но такая же ошибка возникает, когда значения, подобные 12/21/2013 или 02-12-2013 или 2/13/2013 (допустимые форматы) и т. д. разбираются. Другим разумным для значений, подобных 02/12/2013, код отлично работает даже в Windows 7.Im действительно не в состоянии понять, где я иду не так. – user1942809

+0

В '12/21/2013' в этом случае он должен конвертироваться в дату. Но в этом '02-12-2013 или 2/13/2013' ваш точный формат синтаксиса и форматы даты не соответствуют тому, почему ошибка, если ваша культура исправлена, вы должны попробовать код ниже для всех доступных форматов. Сначала сделайте только синтаксический анализ, чтобы проверить, правильно ли все даты правильно разобраны, а затем преобразовать их в необходимый формат. –

+0

Sry to беспокоить. Еще один запрос, почему он отлично работает в xp.even с этим кодом 'DateTime.Parse (DateTime.Parse (arr [TransactionDateIndex]). ToString ("M/d/yyyy h: mm: ss tt"),ноль); 'или это' DateTime.Parse (DateTime.Parse (arr [TransactionDate]). ToString ("M/d/yyyy h: mm: ss tt")); 'код. даже если точный формат синтаксического анализа и формат даты, соответствующий ему, фактически выполняются в xp i.e 12/21/2013,02/12/2013,2/12/2013, все эти значения также анализируются без parse.exact. – user1942809

0

Это может быть так, что есть неверная дата в

arr[TransactionDateIndex] 

Так что попробуйте с жестко закодированы датами первыми. то вы можете проверить все значения, переданные date.parse, используя debug.write() (приложение Windows) или trance.write() (asp.net) с помощью класса debug в System.Diagnostics и проверить окно вывода на любую несогласованную дату формат.

Наконец, вы можете поместить этот код в верхней части методы, где появляется этот код:

System.Threading.Thread.CurrentCulture = CultureInfo.InvariantCulture; 
+0

Это должен был быть комментарий. Если вы говорите ему сделать отладку. –

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

  • Нет связанных вопросов^_^