2015-11-30 7 views
2

В основном пытается прочитать в файле и изменить его из 7 столбцов в 5 столбцов и изменить формат даты. Должен добавить, что я использую linqpad, а язык - это инструкции C#.InvalidCastException конвертировать строку в DateTime

Код:

string txtFolderPath = @"D:\Testing\BM\"; 
string[] files = Directory.GetFiles(txtFolderPath, "cplt.csv", SearchOption.AllDirectories); 
//files.Dump(); 

foreach (string file in files) 
{ 
    // reading in csv file 
    var csvData = from row in new CpltData(@file, 1000000, 1000000, "") 
    //@"C:\Miu\Blue Fin III - A\Blue Fin III - A\cplt.csv" 

    select new 
    { 
     Period = row.Period, 
     IndexEltId = row.IndexEltId, 
     EventId = row.EventId, 
     Date = row.Date.ToString("dd-MMM-yyyy HH.mm.ss"), 
     Payout = row.Payout 
    }; 

    //csvData.Dump(); 

    Util.WriteCsv(csvData, @file); 

} 

Сообщение об ошибке: InvalidCastException Не удалось преобразовать значение '8/22/2015 1:19:01 AM' в DateTime в строке 2

Ошибка происходит по следующей строке:

var csvData = из строки в новой CpltData (@file, 1000000, 1000000, «»)

CpltData(string csvFilePath, int noOfPeriods, double principal, string currency) 

Он импортируется из некоторой библиотеки DLL, не знаю, как получить к нему доступ:/

+1

Можете ли вы показать код для класса 'CpltData'? – juharr

+0

На какой строке вы получаете это исключение? –

+0

@juharr - см. Выше, также soner, пожалуйста, см. Выше – user4659009

ответ

2

Сообщение об ошибке довольно ясно: вы принимаете прекрасно DateTime переменную, превращая его в string, а затем вы пытаетесь присвоить эту строку другой переменной DateTime. Это не вычисляется.

В переменной DateTime такой формат даты не существует.

A DateTime просто держит дату, во внутреннем представлении, которое не имеет абсолютно ничего общего с понятием, что вы могли бы иметь лет, месяцев и т.д. «формат даты» является то, что вы используете при отображении DateTime.

Итак, просто присвойте row.Date вашим Date, и вы закончите с помощью этой части кода.

Позже, когда настало время, чтобы показать, что Date, затем применять «формат даты».

+0

Дело в том, что мне нужно изменить его на правильный формат, dd-MMM-yyyy HH.mm.ss, так что я могу сравнить этот файл excel с другим файлом excel. – user4659009

+2

@ user4659009 Там нет формата. Это всего лишь момент времени. Формат появляется, когда вы пишете его в своей функции 'Util.WriteCsv'. –

+0

Это похоже на пользовательскую ошибку, которая генерируется в таинственном классе 'CpltData'. Кто знает, как он пытается проанализировать данные этого файла в 'DateTime'. – juharr

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