将 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
我从 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