VBA_时间戳的转换问题

时间戳(Unix timestamp)转换工具 - 在线工具:

https://tool.lu/timestamp/

在线解析JSON格式:

https://www.json.cn/

项目的数据库中存储是时间是时间戳形式
导出数据,结果时间全是时间戳

公式原理:
Excel时间实际上是序列值,它从1900-1-1为1开始,没过一天序列值加1。
Excel时间戳实际上是秒数,它从1970-1-1 00:00:00 UTC开始。

1h = 3600s
24h = 24*3600s = 86400s

XN+83600 当前时区的时间(秒)
(XN+8
3600)/86400 转换单位为天
(XN+83600)/86400+70365 加上1900到1970这七十年
(XN+83600)/86400+70365+19 闰年多出来的天数

1970到1900年共有17个闰年,因为Excel是以1900为1开始,那么需要给1970+18,但由于excel的时间bug,Excel认为1900年也为闰年,所以需要给1970+19

时间戳 时间
1970-1-1 1900-1-1

一、Excel中时间戳转换时间
O2 为时间戳单元格
1、=(O2+83600)/86400+70365+19
2、转换后的单元格设置为“时间”格式
3、注意,在 Excel 的工具 -> 选项 -> 重新计算中,有个 1904 年日期系统,如果勾选这个选项,上面的公式应当将 70 改为 66

VBA_时间戳的转换问题

二、Excel时间转换时间戳
XN 为时间戳单元格
公式 =(XN-19-70*365)86400-83600
注意,在 Excel 的工具 -> 选项 -> 重新计算中,有个 1904 年日期系统,如果勾选这个选项,上面的公式应当将 70 改为 66