You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:42:41