Проблема с преобразование string в datetime

236
21 апреля 2018, 17:05

Возникла проблема при преобразовании переменной string в datetime.

Код:

Excel.Application ObjWorkExcel = new Excel.Application(); 
Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Open(@"путь", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
Excel.Worksheet ObjWorkSheet = (Excel.Worksheet)ObjWorkBook.Sheets[1];
Excel.Range last = ObjWorkSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
Excel.Range range = ObjWorkSheet.get_Range("A1", last);
int lastUsedRow = last.Row;
for (int i = 1; i < last.Row; i++)
 {
    string colnum = Convert.ToString(i);           
    var exceldate = ObjWorkSheet.get_Range("O" + colnum, Type.Missing).ToString();
    DateTime date_dt;
    date_dt = DateTime.Parse(exceldate);// ЗДЕСЬ ОШИБКА
    var date = date_dt.ToString("ddMMMyy", CultureInfo.GetCultureInfo("en-us"));
   }

Ошибка на откоменнтированной строчке : "Данная строка не распознана как действительное значение DateTime. Обнаружено неизвестное слово, начинающееся с индекса 0."

Чтение идет из excel файла, в столбце "O" которого находятся даты. Например: 29.03.2018 29.03.2018

Цель преобразование - это вывод из excel даты в формате 29MAR18.

Подскажите, где я ошибся?

ОБНОВЛЕНИЕ ИНФОРМАЦИИ:

Почитал про то, как лучше перегонять даты из excel. Советуют перегнать в double, а уже его в dstetime с помощью FRomOADate. Получается что то вроде:

var exceldate = ObjWorkSheet.get_Range("O" + colnum, Type.Missing).ToString();
double exceldate_d = double.Parse(exceldate);//Ошибка
var date = DateTime.FromOADate(exceldate_d).ToString("ddMMMyy", CultureInfo.GetCultureInfo("en-us"));

Ошибка: "входная строка имела неверный формат". Пробовал добавить в parse cultureinfo. Например:

double exceldate_d = double.Parse(exceldate, CultureInfo.GetCultureInfo("ru-ru"));

или

double exceldate_d = double.Parse(exceldate, CultureInfo.InvariantCulture);

Но результат всё тот же. Никак не читается формат даты из excel.

Answer 1

Парсим дату в формате "29MAR18":

var date = DateTime.ParseExact("29MAR18", "ddMMMyy", CultureInfo.InvariantCulture);

Парсим дату формата "29.03.2018" :

DateTime.Parse("29.03.2018", CultureInfo.GetCultureInfo("ru-ru"));

Нужно внимательно следить за культурой, которая используется при чтение даты. К примеру, если указать CultureInfo.GetCultureInfo("en-us"), то вы получите ошибку.

READ ALSO
Не срабатывает событие MimeKit

Не срабатывает событие MimeKit

Подскажите пожалуйста, почему может не срабатывать событиеВот мой код

247
Entity Framework создаёт лишнюю таблицу

Entity Framework создаёт лишнюю таблицу

К примеру, имеется у меня контекст из двух сетов:

231
Xamarin ListView как обновить отображение?

Xamarin ListView как обновить отображение?

Через кнопки пытаюсь взаимодействовать со списком, добавлять/удалять элементы, изменять размер строк(ячеек) через SliderНо всё это не отображается,...

378
Не до конца пишет в файл

Не до конца пишет в файл

Функция пишет в файл html кодНо последней строчкой в файле является <br></td></tr><tr><td>Источники При отладке все строки программы...

248