【问题标题】:How to convert string datetime to UTC UNIX?如何将字符串日期时间转换为 UTC UNIX?
【发布时间】:2021-04-12 14:40:52
【问题描述】:

我在string 中有date,格式如下: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

我做错了什么?

【问题讨论】:

  • 什么是CEST format?您的输入字符串是否代表 CEST 时间?
  • CEST:中欧标准时间。我在德国,所以我觉得它正在考虑我当地的时区
  • 202001010000 是 UTC 2020 年 1 月 1 日午夜还是您当地的时区?
  • @PranavHosangadi 当地时区
  • 在这种情况下,您不应该替换时区。 int(datetime.datetime.strptime(stime, "%Y%m%d%H%M").timestamp()) 应该为您提供计算机本地时区的时间戳“202001010000”

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


【解决方案1】:

在转换为日期时间时,您将时区设置为 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

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

【讨论】:

    【解决方案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))
    

    【讨论】:

    • CET/CEST 比 UTC 晚 7 小时?不,一般来说,这不是您在 Python 中处理 UTC 偏移量的方式。
    • 除了 MrFuppes 所说的之外,当人们在 Stack Overflow 上提出一个带有示例输入的问题时,他们通常是在寻找一个通用的解决方案。 “将其硬编码到您的代码中”通常不是可接受的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 2015-10-24
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多