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

时间:2014-07-20 18:16:25

标签: python python-3.x timestamp

我是一名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()

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

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

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

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

有人可以帮我理解我正在处理的事情吗?

1 个答案:

答案 0 :(得分: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)

请参阅Why 1899-12-30!?

要将Excel编号转换为Unix时间戳,可以使用timetuple methoddatetime.date对象转换为时间元组,然后使用time.mktime将其转换为时间戳(秒)自大纪元以来:

In [80]: import time

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