2016-10-11 14 views
-1

Я читал строки из файла журнала со значением даты, как это:Невозможно разобрать строку на сегодняшний день с TryParse точным

Thu Oct 06 15:38:45 2016 

Очевидно

DateTime.TryParse()... 

не будет справиться с этим. Итак, я попытался с помощью

DateTime.TryParseExact() 

так:

 string szDateFormat = "ddd MMM yy HH:mm:ss yyyy"; 
     string szTest = "Thu Oct 06 15:38:45 2016"; 
     DateTime dd; 
     DateTime.TryParse(szTest, out dd); 

     CultureInfo current = CultureInfo.CurrentCulture; 
     CultureInfo newculture = new CultureInfo("en-US"); 

     Console.WriteLine(current); 
     Console.WriteLine(newculture); 

     Console.WriteLine(String.Format(" Test: {0}", szTest)); 
     Console.WriteLine(String.Format("Format: {0}", szDateFormat)); 
     Console.WriteLine(String.Format(" dd: {0:ddd MMM yy HH:mm:ss yyyy}", dd)); 
     Console.WriteLine(""); 


     DateTime.TryParseExact(szTest, szDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dd); 
     Console.WriteLine(String.Format(" Test: {0}", szTest)); 
     Console.WriteLine(String.Format("Format: {0}", szDateFormat)); 
     Console.WriteLine(String.Format(" dd: {0:ddd MMM yy HH:mm:ss yyyy}", dd)); 
     Console.WriteLine(""); 

И результат таков:

en-US 
    en-US 
     Test: Thu Oct 06 15:38:45 2016 
    Format: ddd MMM yy HH:mm:ss yyyy 
     dd: Mon Jan 01 00:00:00 0001 

     Test: Thu Oct 06 15:38:45 2016 
    Format: ddd MMM yy HH:mm:ss yyyy 
     dd: Mon Jan 01 00:00:00 0001 

В предыдущей итерации я использовал

CultureInfo.CurrentCulture 

а без изменений.

Любая помощь будет оценена по достоинству.

Спасибо, Джон

+0

Вы должны использовать„ддд МММ дд чч: мм: сс гггг“. – itsme86

+0

Вы читаете день месяца как год? –

ответ

1

Я думаю, что ваш формат даты неверен «ддд МММ уу HH: мм: сс гггг»должен быть

"ddd MMM dd HH:mm:ss yyyy" 
+0

Это правильно. Я пропустил это. Когда я изменил это на dd, он отлично работал с помощью TryParseExact. По-видимому, мой мозг застыл в мысли «день месяца месяца», а не «день месяца».Спасибо всем, кто указал на мою ошибку. Джон – John

2

Вы пытаетесь разобрать числовой день (06) с yy, когда вы должны использовать dd:

ddd MMM dd HH:mm:ss yyyy 
2

Я думаю, что это проблема:

string szDateFormat = "ddd MMM yy HH:mm:ss yyyy"; 
string szTest = "Thu Oct 06 15:38:45 2016"; 

Формат должен быть:

ddd MMM dd HH:mm:ss yyyy 

, если вы хотите, чтобы разобрать:

Thursday 06.10.2016 15:38:45 

Третий параметр yy должен быть dd, как он будет конфликтовать с последним параметром yyyy. yy указывает на 2006 год, но yyyy относится к 2016 году. Это создаст путаницу для синтаксического анализатора.

0

Мои два цента:

  1. «дд» никогда не устанавливается, так как он никогда не анализируется Собственость в первую очередь так «дд: пн 1 января 0001 00:00:00» это на самом деле не имеет смысла.
  2. Если формат ввода всегда то же самое, предварительно разобрать его, например, поместить последние 4 символов - год- в начале строки)