将 Excel 时间格式的数字转换为 python 中的等效字符串

Convert number in Excel time format to string equivalent in python

我从 Excel 时间格式 m/d/yy h:mm 单元格中提取数据,数字内容为“1645704206000”。当转换为显示时间的等效字符串时,它是 2/24/22 12:03.

如何使用 python 将此数字“1645704206000”转换为 2/24/22 12:03

时区为 GMT 时区。

我正在使用 Python 3.9 和 Excel 2019。

更新

似乎在 datetime 函数上使用 utcfromtimestamp 是错误的(感谢@FObersteiner 的评论)。您应该改用 fromtimestamp。所以你可以使用下面的代码而不是底部的代码。请注意,pytz 已弃用。看来 zoneinfo 可以完成 pytz 的工作。

from datetime import datetime
import pytz
tzHong = pytz.timezone('Hongkong')
tzGMT = pytz.timezone('Etc/GMT')
dateString = "1645704206000"
date = datetime.fromtimestamp(float(dateString)/1000, tz=tzGMT)
print("Date in Hongkong: " + date.astimezone(tz=tzHong).strftime("%m-%d-%y %I:%M"))
print("Date in GMT: " + date.strftime("%m-%d-%y %I:%M"))

旧版本

看起来 Excel 的自然内部表示相关的问题有问题。但是,如果您有兴趣将时间戳(带毫秒)转换为字符串,human-readable 日期,您可以使用 python:

中的 datetime 模块
from datetime import datetime
import pytz
tzHong = pytz.timezone('Hongkong')
tzGMT = pytz.timezone('Etc/GMT')
dateString = "1645704206000"
date = datetime.utcfromtimestamp(float(dateString)/1000)
print("Date in Hongkong: " + date.astimezone(tz=tzHong).strftime("%m-%d-%y %I:%M"))
print("Date in GMT: " + date.astimezone(tz=tzGMT).strftime("%m-%d-%y %I:%M"))

输出

Date in Hongkong: 02-24-22 08:03
Date in GMT: 02-24-22 12:03

另请注意,您显示的日期 (2/24/22 12:03) 使用 GMT 时区,而不是香港。两个时区都显示在上面的代码中。确保哪一个适用于您想要的输出。此外,此答案提供的答案采用 12 小时制格式。如果您对 24 小时格式感兴趣,只需将上面代码中的 %I 更改为 %H.

up-to-date (Python 3.9+) 版本:

from datetime import datetime, timezone
from zoneinfo import ZoneInfo 
tz_HK = ZoneInfo('Asia/Hong_Kong') # 'Hongkong' just links to 'Asia/Hong_Kong'

unix_ms = "1645704206000"
dt_utc = datetime.fromtimestamp(float(unix_ms)/1000, tz=timezone.utc)
print("date/time in Hongkong: " + dt_utc.astimezone(tz=tz_HK).strftime("%m-%d-%y %I:%M"))
print("date/time in UTC: " + dt_utc.strftime("%m-%d-%y %I:%M"))
date/time in Hongkong: 02-24-22 08:03
date/time in UTC: 02-24-22 12:03