读取Excel日期和时间并转换为Unix Timestamp遇问题求解决
Excel日期时间拼接转Unix时间戳问题解决
问题原因分析
你读取到的45131是Excel的日期序列号——Excel默认以1900年1月0日为基准(实际存在闰年bug,真实基准是1899年12月30日),每过一天序列号加1,2023年7月24日对应的序列号正好是45131。而时间列返回null,大概率是读取时未正确识别时间格式,或者未启用data_only参数导致读取的是单元格公式而非实际值。
解决方案(Python实现)
以下提供两种常用库的处理方案,按需选择:
方案1:用Pandas快速处理(推荐)
Pandas能自动识别Excel的日期序列号,还能直接合并日期和时间列:
import pandas as pd # 读取Excel,自动合并time1(日期列)和time2(时间列)为datetime类型 df = pd.read_excel("你的文件路径.xlsx", parse_dates={"完整时间": ["time1", "time2"]}) # 转换为Unix时间戳(秒级) df["unix_timestamp"] = df["完整时间"].apply(lambda x: int(x.timestamp())) # 查看结果 print(df[["完整时间", "unix_timestamp"]])
方案2:用OpenPyxl手动处理
如果需要更精细的单元格控制,用OpenPyxl:
from openpyxl import load_workbook from datetime import datetime, timedelta def excel_serial_to_date(serial): # 修复Excel 1900年闰年bug if serial < 60: serial += 1 # Excel实际基准日期是1899-12-30 return datetime(1899, 12, 30) + timedelta(days=serial) # 加载工作簿,data_only=True确保读取单元格实际值而非公式 wb = load_workbook("你的文件路径.xlsx", data_only=True) ws = wb.active # 示例:读取第2行的日期(A2)和时间(B2) date_serial = ws["A2"].value time_obj = ws["B2"].value # 转换日期序列号为日期对象 date_obj = excel_serial_to_date(date_serial) # 拼接日期和时间 full_datetime = datetime.combine(date_obj.date(), time_obj) # 转Unix时间戳 unix_ts = int(full_datetime.timestamp()) print(f"拼接后的时间:{full_datetime}") print(f"Unix时间戳:{unix_ts}")
注意事项
- 确保Excel文件中
time2列的格式是时间类型,而非文本或空值; - 如果使用OpenPyxl,必须设置
data_only=True,否则可能读取到单元格的公式内容而非实际时间值。
内容的提问来源于stack exchange,提问作者ethanlee010
相关产品推荐
相关产品推荐

