Python-如何将本地时间字符串转换为UTC?

发布于 2021-02-02 23:19:21

如何将本地时间的datetime 字符串转换为UTC时间的字符串?

我确定我之前已经做过,但是找不到它,因此SO希望将来可以帮助我(和其他人)做到这一点。

澄清:例如,如果我2008-09-17 14:02:00在本地时区(+10)中,我想生成一个等效UTC时间的字符串:2008-09-17 04:02:00。

另外,从http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/,请注意,一般来说这是不可能的,因为DST和其他问题没有从本地时间到本地时间的唯一转换。 UTC时间。

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    从字符串到字符串的完整转换如下:

    time.strftime("%Y-%m-%d %H:%M:%S", 
                  time.gmtime(time.mktime(time.strptime("2008-09-17 14:04:00", 
                                                        "%Y-%m-%d %H:%M:%S"))))
    

    我对time/ calendar函数的总结:

    time.strptime
    字符串->元组(未应用时区,因此匹配字符串)

    time.mktime
    当地时间元组->自纪元以来的秒数(总是当地时间)

    time.gmtime
    自纪元以来的秒数-> UTC中的元组

    calendar.timegm
    以UTC表示的元组->自历元以来的秒数

    time.localtime
    自纪元以来的秒数->当地时区中的元组



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。


    首先,将字符串解析为一个简单的datetime对象。这是的实例,datetime.datetime没有附加的时区信息。请参阅文档以datetime.strptime获取有关解析日期字符串的信息。

    使用pytz带有时区+ UTC完整列表的模块。弄清楚本地时区是什么,从中构造一个时区对象,然后将其操纵并附加到原始日期时间。

    最后,使用datetime.astimezone()方法将日期时间转换为UTC。

    使用本地时区“ America / Los_Angeles”的字符串“ 2001-2-3 10:11:12”的源代码:

    import pytz, datetime
    local = pytz.timezone ("America/Los_Angeles")
    naive = datetime.datetime.strptime ("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
    local_dt = local.localize(naive, is_dst=None)
    utc_dt = local_dt.astimezone(pytz.utc)
    

    从那里,您可以strftime()根据需要使用该方法格式化UTC日期时间:

    utc_dt.strftime ("%Y-%m-%d %H:%M:%S")
    
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看