2013-09-14 3 views
0

У меня есть сервер с .txt-файлом. Программа сохраняет страницу в текстовом файле, а затем обрабатывается в строке с использованием count. Затем мне нужно добавить его в datetime, а затем добавить его в список.C# date time to listbox

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

Времена в списке следующим образом:

06:06 AM 
06:07 
12:12 
12:50 

Один за линию

окно сообщений показывает каждый результат в то время, без ошибок и правильного Infomation.

while ((line = file.ReadLine()) != null) 
{ 

    // MessageBox.Show(line); 
     List<DateTime> Busarrivetime = new List<DateTime>(); 
    // DateTime tryme = DateTime.Parse(line, CultureInfo.InvariantCulture); 
    // MessageBox.Show(tryme.ToString()); 
     DateTime date; 
     Busarrivetime.Add(date = DateTime.ParseExact(line,"hh:mm tt", System.Globalization.CultureInfo.InvariantCulture)); // ERRORS ON THIS LINE 

     count++; 
} 

file.Close(); 

Console.ReadLine(); 

Точная ошибка:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Here is the list I am working with.

+0

'ParseExact' не может разобрать' line', поскольку его не в соответствующем формате, используйте 'TryPraseExact' – Ofiris

+0

hh: mm tt не покрывает всю строку datetime, не так ли? попробуйте дать во всем формате строки, которую вы читаете –

+0

Каково значение строки, когда на этой итерации? Мое предположение состояло бы в том, что оно '' '', потому что в конце текстового файла есть пустая строка. Попробуйте проверить 'String.IsNullOrEmpty' (или просто пустую), прежде чем пытаться что-либо с этим сделать. – Chris

ответ

1

Ваши временные форматы не всегда одинаковы. Например, 06:06 AM имеет обозначение am/pm, где 12:12 нет.

Поэтому рассмотрите возможность использования нескольких возможных форматов.

DateTime.ParseExact(item, new[] { "hh:mm tt", "HH:mm" }, System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None); 

Это должно работать

+0

Кажется, что все нормально работает в выводе сообщения, как будто нет AM в начале, у всех из них не будет индикатора времени. и когда он достиг 12, он автоматически переключается на PM. Попробуй свой код сейчас. Все еще дает ту же ошибку – Jeremy

0

Его простое решение

я тестировал с этим DateTime.ParseExact("06:06 AM ", "hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);

и получил исключение такой же, как ваша.

но испытано с этим

DateTime.ParseExact("06:06 AM", "hh:mm tt", System.Globalization.CultureInfo.InvariantCulture); 

Не получил. Файл собирает конечные или ведущие пробелы. Функция

Используйте .trim() :), чтобы удалить их, а затем проверить

DateTime.ParseExact(("06:06 AM ").Trim(), "hh:mm tt", System.Globalization.CultureInfo.InvariantCulture); 
0

Может быть, что есть дополнительная пустая строка в конце файла?

// add this just inside your while loop 
if (String.IsNullOrWhiteSpace(line)) 
    continue; 

Кроме того, вы должны объявить список перед тем в то время цикла, или вы будете просто получать новый список для каждой строки вместо добавления в один большой список.

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