Я нашел и использовал следующую библиотеку .NET , реализующую текстовое математику Aho-Corasick от Tom Petricek для решения проблемы, с которой я столкнулся. Это прекрасно сработало для меня.
Базовый тип данных datetime в Excel - это 64-битное число с плавающей запятой, где длина дня равна 1, а 1 января 1900 00:00 равна 1. Итак, 11 июня 2009 г. 17: 30 составляет примерно 39975,72917.
Если ячейка содержит числовое значение, подобное этому, его можно преобразовать в дату и время, просто применив к ячейке формат даты и времени.
Итак, если вы можете преобразовать дату и время в числа, используя по приведенной выше формуле, выведите их в соответствующие ячейки, а затем установите форматы ячеек на соответствующий формат даты и времени, например, гггг-мм-дд чч: мм: сс, тогда должно быть возможно получить то, что вы хотите.
Также Стефан де Брюйн указал, что в Excel есть ошибка, поскольку он ошибочно предполагает, что 1900 год является високосным, поэтому вам необходимо принять это во внимание при проведении расчетов ( Википедия ).
Excel может отображать тип даты аналогично DateTime. Щелкните правой кнопкой мыши по затронутой ячейке, выберите Формат ячеек , затем в Категория выберите Дата и в Тип выберите тип, который выглядит примерно так this:
3/14/01 1:30 PM
Это должно сделать то, что вы просили. Я протестировал сортировку на некоторых примерах данных в этом формате, и, похоже, он работал нормально.
Excel ожидает, что даты и время будут сохраняться в виде числа с плавающей запятой, значение которого зависит от Параметр Date1904 книги, а также числовой формат, такой как «мм / дд / гггг» или «чч: мм: сс» или «мм / дд / гггг чч: мм: сс», чтобы число отображалось для пользователя как дату / время.
Используя SpreadsheetGear for .NET , вы можете сделать это: worksheet.Cells ["A1"]. Value = DateTime.Now;
Это преобразует DateTime в double, который является базовым типом, который Excel использует для даты / времени, а затем отформатирует ячейку с датой по умолчанию и / или формат числа времени автоматически в зависимости от значения.
SpreadsheetGear также имеет методы IWorkbook.DateTimeToNumber (DateTime) и NumberToDateTime (double), которые преобразуют объекты .NET DateTime в двойные, которые может использовать Excel.
Я ожидал XlsIO, чтобы иметь что-то подобное.
Отказ от ответственности: я владею SpreadsheetGear LLC
Вы можете установить значения даты и времени для ячейки в XlsIO, используя одну из этих опций
sheet.Range["A1"].Value2 = DateTime.Now;
sheet.Range["A1"].NumberFormat = "dd/mm/yyyy";
sheet.Range["A2"].DateTime = DateTime.Now;
sheet.Range["A2"].NumberFormat = "[$-409]d-mmm-yy;@";
Вы можете найти дополнительную информацию здесь .