Kri*_*ish 22 python excel date python-2.7
我有一个值38142我需要使用python将其转换为日期格式.如果在excel中使用此数字并在此时右键单击并格式化单元格,则该值将转换为04/06/2004,并且我需要使用python获得相同的结果.我怎样才能做到这一点
Mar*_*ers 24
Excel中的偏移量是自1900/01/01以来的天数,1是1900年1月的第一天,因此将天数添加为1899/12/31的timedelta:
from datetime import datetime, timedelta
def from_excel_ordinal(ordinal, _epoch0=datetime(1899, 12, 31)):
if ordinal > 59:
ordinal -= 1 # Excel leap year bug, 1900 is not a leap year!
return (_epoch0 + timedelta(days=ordinal)).replace(microsecond=0)
Run Code Online (Sandbox Code Playgroud)
对于1900/02/28之后的任何日期,您必须将序数调整一天; Excel继承了Lotus 1-2-3 的闰年错误,将1900年视为闰年.上面的代码返回datetime(1900, 2, 28, 0, 0)两者59并60为此纠正.
上面也支持一系列表示时间的连续出版物,但由于Excel不支持微秒,因此会删除它们.
小智 7
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)
Run Code Online (Sandbox Code Playgroud)
上面的答案仅适用于日期值,但在这里我扩展了上述解决方案以包括时间并返回日期时间值。
| 归档时间: |
|
| 查看次数: |
5367 次 |
| 最近记录: |