Как преобразовать заданный порядковый номер (из Excel) в дату
У меня есть значение 38142 Мне нужно преобразовать его в формат даты с помощью python. если использовать этот номер в excel и сделать ячейку правого клика и форматирования в это время, значение будет преобразовано в 04/06/2004, и мне нужен тот же результат с использованием python. Как я могу достичь этого
- Как вставлять и добавлять элементы в поле со списком в Excel через Python?
- Отображение объекта AttributeError: объект 'unicode' не имеет атрибутов 'nrows' в xlrd python?
- Как избежать перезаписи ячейки в excel с помощью python?
- Доступ к константам перерассеяния в Excel COM с использованием Python и win32com
- Как сопоставить два словаря?
- Ошибка Python: IndexError: не может выполнить непустой выбор из пустых осей
- Pandas иногда пишет пустые или поврежденные файлы
- Как я могу сделать автоматизацию для excel для xml в python?
Смещение в Excel с 1900/01/01; добавьте количество дней как timedelta:
from datetime import date, timedelta def from_excel_ordinal(ordinal, _epoch=date(1900, 1, 1)): if ordinal > 59: ordinal -= 1 # Excel leap year bug, 1900 is not a leap year! return _epoch + timedelta(days=ordinal - 1) # epoch is day 1
Мне пришлось корректировать порядковый номер на 2 для любой даты после 1900/02/28; Excel унаследовал ошибку високосного года от Lotus 1-2-3 и рассматривает 1900 как високосный год. Приведенный выше код возвращает date(1900, 2, 28)
для 59
и 60
для исправления этого.
from datetime import datetime, timedelta def from_excel_ordinal(ordinal, epoch=datetime(1900, 1, 1)): # Adapted from above, thanks to @Martijn Pieters if ordinal > 59: ordinal -= 1 # Excel leap year bug, 1900 is not a leap year! inDays = int(ordinal) frac = ordinal - inDays inSecs = int(round(frac * 86400.0)) return epoch + timedelta(days=inDays - 1, seconds=inSecs) # epoch is day 1 excelDT = 42548.75001 # Float representation of 27/06/2016 6:00:01 PM in Excel format pyDT = from_excel_ordinal(excelDT)
Вышеупомянутый ответ подходит только для значения даты, но здесь я расширяю указанное выше решение, чтобы включить время и вернуть значения даты и времени.