python将excel时间_Python学习笔记(一)Python时间戳与Excel的日期

本文介绍了如何在Python中处理Excel文件中的日期,通过将Excel的日期浮点数转换为时间戳,计算出库龄。作者分享了解决当前时间与Excel日期差值的方法,并提供完整代码示例,用于找出库存报表中的最长库龄。

今天遇到一个比较实际的问题,从库存报表里面识别出最长库龄的零件,并计算出库龄。

思路很简单,将当前日期减去表格日期,得到库龄。找到max库龄就ok了。

以2行的日期为例,先print日期

d1 = sheet1.cell(1, 22)

print(d1)

结果是:xldate:42368.0

不是一个数字,浮点数字42368.0。

然后用print一下当前的日期。

d2 = datetime.datetime.now()

print(d2)

得到结果是时间数组格式:2020-05-25 20:39:09.933949

明显两者类型不同无法直接相减。

解决思路:

接下来是很有趣的信息(本文的精华就是下面这两句话)。

excel读到的日期的浮点数,代表的是自1900年1月1日以来的天数。

python的时间戳是指格林威治时间自1970年1月1日至当前时间的总秒数。

所以有两种思路:库龄天数=(当前时间戳-表格时间戳)/60/60/24

将excel的浮点数(42368.0)转化成时间数组格式(这步有点麻烦),再转化成时间戳。

然后也将python读到的当前时间(2020-05-25 20:39:09.933949)转换成时间戳,然后再将秒数折算成天数。

2. 库龄天数=表格浮点数-当前日期转换成浮点数

将python的当前时间数组格式-1899年12月31日的时间数组格式,得到的一个时间数组格式。这个差值转换成天数(datetime模块下 .days)。得到当前距离1900年1月1日的天数。然后减去表格的浮点数,得到库龄。

我用的是第2种解决方法是:

date_start = datetime.datetime(1899, 12, 31) #excel表起始日期1900年1月1日

date_now = datetime.datetime.now() #当前时间

d2 = date_now - date_start #今天距离1900年1月1日时间

d2 = today.days #转化为1900年1月1日天数。

d3 = d1 - d2 #库龄

print(d1)

print(d2)

print(d3)

#得到结果

42368.0

43975

1607.0 #库龄

附上完整的代码,找到最长库龄。

import xlrd

import xlwt

import datetime

#读取收货日期,计算库龄,找到最长库龄

wb = xlrd.open_workbook('库存报表20200520.xlsx')

sheet1 = wb.sheet_by_name('Sheet1')

#计算当前时间,转换成excel时间戳,excel时间戳其实时间1990年1月1日

date_start = datetime.datetime(1899, 12, 31)

date_now = datetime.datetime.now()

tod = date_now - date_start

#计算库龄,写入数列deltas

deltas = []

titlesrow = 1

nrows = sheet1.nrows-2

for i in range(nrows):

d = sheet1.cell(1+i, 22)

d = int(d.value)

delta = tod.days - d

deltas.append(delta)

# 新建一个表格,记录分析结果

wb = xlwt.Workbook()

sheet = wb.add_sheet('关键数据')

titles = ['最长库龄', '零件号', '零件名称', '数量']

for i in range(len(titles)):

sheet.write(0, i, titles[i])

# 找到最大库龄,写到表格

max = max(deltas)

sheet.write(1, 0, max)

# 最大库龄对应的零件号,数量

max_index = deltas.index(max)

max_part = sheet1.cell(max_index + 1, 3).value

max_name = sheet1.cell(max_index + 1, 4).value

max_num = sheet1.cell(max_index + 1, 5).value

sheet.write(1, 1, max_part)

sheet.write(1, 2, max_name)

sheet.write(1, 3, max_num)

wb.save('库存分析.xls')

输出结果,在库存分析.xls的sheet1中:

第一次写文章,不知道大家看懂了没。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值