Python 返回 5 位时间戳,这是啥?

Posted

技术标签:

【中文标题】Python 返回 5 位时间戳,这是啥?【英文标题】:Python returns 5 digit timestamp, what is this?Python 返回 5 位时间戳,这是什么? 【发布时间】:2014-09-11 06:32:36 【问题描述】:

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

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

但最终的 csv 包含一个数字 39814。请问这是什么,我能用它做什么? 2009 年 1 月 2 日是 39815。

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

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

【问题讨论】:

Python 在这里无关紧要;这就是您看到的内部 Excel 日期表示。 【参考方案1】:

如果 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 method 将 datetime.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

【讨论】:

以上是关于Python 返回 5 位时间戳,这是啥?的主要内容,如果未能解决你的问题,请参考以下文章

时间戳中的 T 和 Z 到底是啥意思?

python将10位日期时间戳转换为13位GMT时间戳[重复]

Hive SQL计算5天前的时间戳

python获取时间戳

oracle数据库 时间 TIMESTAMP(6)这是啥类型啊 怎么也插不进数据

linux下ping -T(也就是加入时间戳)如何使用?不知道应该带啥类型的数据,总是返回说数据类型不对。