Python返回5位数的时间戳,这是什么?

And*_*rei 2 python timestamp python-3.x

我是一名PHP程序员,正在做一些Python(3.4),因为它在Python中更容易实现.我的脚本将.xlsx文件转换为许多.csv文件(每张一个.csv).

这是代码:

wb = xlrd.open_workbook(filepath)

for i in range(0, wb.nsheets):

    sh = wb.sheet_by_index(i)
    sheet_name = sh.name
    sheet_name = sheet_name.replace(" ", "_");
    fp = open(sheet_name+'.csv', 'at', encoding='utf8')
    wr = csv.writer(fp, quoting=csv.QUOTE_ALL)

    for row_num in range(sh.nrows):
        wr.writerow(sh.row_values(row_num))

    fp.close()
Run Code Online (Sandbox Code Playgroud)

完整代码:https://github.com/xtrimsky/xlsx_to_csv

这很好用,除了我有一个日期字段,在excel中显示例如:01/01/2009

但最终的csv,包含一个39814的数字.请问这是什么,我能用它做什么?01/02/2009是39815.

这是我可以用来查找unix时间戳的数字吗?或者这是一个问题,我应该改变我的脚本?如果只返回字符串"01/01/2009",我会觉得更安全.

有人可以帮我理解我在处理什么吗?

unu*_*tbu 5

如果39814映射到2009-1-1和39815映射到2009-1-2,那么看起来序数正在计算自1899-12-30以来的天数:

In [57]: DT.date(1899,12,30) + DT.timedelta(days=39814)
Out[57]: datetime.date(2009, 1, 1)
Run Code Online (Sandbox Code Playgroud)

看看为什么1899-12-30!?

要将Excel编号转换为Unix时间戳,可以使用该timetuple方法将datetime.date对象转换为timetuple,然后使用time.mktime将其转换为时间戳(自Epoch以来的秒数):

In [80]: import time

In [81]: time.mktime((DT.datetime(1899,12,30) + DT.timedelta(days=39814)).timetuple())
Out[81]: 1230786000.0
Run Code Online (Sandbox Code Playgroud)