三星健康导出的44428类日期格式是什么?如何用Python转换为标准格式?
日期格式类型判定
你遇到的这个数值是Excel 1900日期系统的序列值,也是三星健康导出数据时默认使用的日期存储格式:
- 整数部分代表距离基准日的完整天数
- 小数部分代表当日时刻占24小时的比例
Excel能自动识别转换,是因为内置了这套序列值的转换逻辑。注意这套日期系统存在历史遗留的兼容设计:错误将1900年识别为闰年,所以转换时需要对齐这个逻辑才能得到和Excel完全一致的结果,你给出的样例值44428.6628726736,按规则换算后正好对应16-11-2021 3:34:20 AM,和给出的实际值完全匹配。
Python 转换代码实现
提供两种常用实现,转换结果和Excel自动转换结果完全一致:
方法1:pandas 批量处理(适合处理整列导出数据)
处理三星健康导出的整表数据时用这个方法效率最高,直接调用内置日期转换函数即可:
import pandas as pd serial_value = 44428.6628726736 # origin参数设置为1899-12-30是为了对齐Excel 1900日期系统的闰年偏移bug converted_dt = pd.to_datetime(serial_value, unit="D", origin="1899-12-30") # 按样例格式输出 print(converted_dt.strftime("%d-%m-%Y %I:%M:%S %p")) # 输出结果:16-11-2021 03:34:20 AM
如果是处理DataFrame里的整列日期,直接传入列即可:df['date_col'] = pd.to_datetime(df['date_col'], unit='D', origin='1899-12-30')
方法2:标准库实现(无第三方依赖)
如果不想安装pandas,直接用Python内置的datetime模块也能实现:
from datetime import datetime, timedelta serial_value = 44428.6628726736 base_date = datetime(1899, 12, 30) converted_dt = base_date + timedelta(days=serial_value) # 按样例格式输出 print(converted_dt.strftime("%d-%m-%Y %I:%M:%S %p")) # 输出结果:16-11-2021 03:34:20 AM
注意事项
如果转换后得到的时间和本地时间有偏差,注意三星健康导出的原始时间默认是UTC时区,可根据自身所在时区追加时间偏移,比如东八区就再加timedelta(hours=8)即可。
内容的提问来源于stack exchange,提问作者FL44ME
相关产品推荐
相关产品推荐

