如何将字符串日期时间转换为 UTC UNIX?

时间:2021-04-12 14:40:52

标签: python python-3.x datetime unix-timestamp

我在 as date 中有 string,格式如下:202001010000

我正在尝试将其转换为 UNIX 格式并在 UTC

中获得结果

我做到了:

import datetime

stime = "202001010000"

print(int(datetime.datetime.strptime(stime, "%Y%m%d%H%M").replace(tzinfo=datetime.timezone.utc).timestamp()))

这给了我 UNIX 格式的输出,但格式为 CEST

使用上面的代码我得到:1577836800 但我希望输出为 1577833200

我做错了什么?

2 个答案:

答案 0 :(得分:2)

在转换为日期时间时,您将时区设置为 UTC。但是由于您的输入代表德国的时间,因此您需要一个在那里处于活动状态的时区。例如:

from datetime import datetime
from zoneinfo import ZoneInfo # Python 3.9+, can use backports.zoneinfo for older versions

stime = "202001010000"
# stime represents time in Germany so we use time zone
time_zone = ZoneInfo('Europe/Berlin')

# to datetime, with tz set:
dtobj = datetime.strptime(stime, "%Y%m%d%H%M").replace(tzinfo=time_zone)

# unix time
ts = dtobj.timestamp()
print(ts)
# 1577833200.0

# back to datetime, again specify time zone
dtobj = datetime.fromtimestamp(ts, tz=time_zone)
print(dtobj)
# 2020-01-01 00:00:00+01:00

请注意,如果输入表示您的操作系统配置为使用的同一时区,则无需设置时区即可正常工作。但我认为最好在这里明确一点,以避免混淆,例如在配置为使用其他时区的机器上运行此脚本。

答案 1 :(得分:-2)

您想要得到的结果比开始日期晚了 7 小时,而且您无法做到这一点。您必须将开始日期推迟 1 天,并将您的工作时间提前 17。此代码对您有用

import datetime

stime = "201912310000"

my_date = datetime.datetime.strptime(stime, "%Y%m%d%H%M")
my_date_utc = my_date.replace(hour=17)
my_timestamp = my_date_utc.timestamp()
print(int(my_timestamp))