【问题标题】:Epoch conversion not working as expected纪元转换未按预期工作
【发布时间】:2016-11-28 06:01:05
【问题描述】:

使用以下代码,我想将输入的日期和时间转换为纪元。问题是我得到一个纪元输出,但是当我通过在线转换 (http://www.epochconverter.com/) 对其进行测试时,纪元不会转换为我输入的日期和时间:

date_time2 = '09.03.1999' + " " + "13:44:17.000000"
pattern2 = '%d.%m.%Y %H:%M:%S.%f'
epoch2 = int(time.mktime(time.strptime(date_time2, pattern2)))
print epoch2

【问题讨论】:

  • 这对我有用。你从在线转换器得到什么输出?
  • 运行该块时得到 921005057。但是,当我将该时间戳放入在线转换器时,它说时间戳是格林威治标准时间 18:44:17(注意输入时间已经是格林威治标准时间)。应该是格林威治标准时间 13:44:17
  • 那你有必要这样做吗?:stackoverflow.com/questions/19527351/…
  • 可能。即使我提供的时间戳是格林威治标准时间?
  • 这可能是时区问题?

标签: python time epoch


【解决方案1】:

(我已经在这里投票支持@donkopotamus 的回答:https://stackoverflow.com/a/38558696/42346

使用这个答案:https://stackoverflow.com/a/19527596/42346 我们可以看到如何将您的当地时间转换为 GMT。这需要pytz

import datetime as dt 
import pytz

naive_date = dt.datetime.strptime('09.03.1999' + " " + "13:44:17.000000", 
                                  '%d.%m.%Y %H:%M:%S.%f')
localtz = pytz.timezone('Hongkong')
date_aware = localtz.localize(naive_date,is_dst=None)
utc_date = date_aware.astimezone(pytz.utc)
int(time.mktime(utc_date.utctimetuple()))

结果:

920987057

【讨论】:

    【解决方案2】:

    这里发生了什么:

    • time.strptime 生成一个 time.struct_time,它与 C 的 tm 结构非常相似;
    • time.mktime 的文档非常清楚,它从struct_time 生成本地时间,而不是 GMT 时间。

    因此,您需要一个将 struct_time 转换为 GMT 时间的函数。这样的函数在 python 中被隐藏了一点,在 calendar 模块中。

    试试吧:

    date_time2 = '09.03.1999' + " " + "13:44:17.000000"
    pattern2 = '%d.%m.%Y %H:%M:%S.%f'
    
    # get a time structure
    tm = time.strptime(date_time2, pattern2)
    
    # convert to gmt
    gmt_epoch = int(calendar.timegm(tm))
    

    在这种情况下,我们最终得到:

    >>> gmt_epoch
    920987057
    

    将其插入您提供的网站会显示这是 GMT: Tue, 09 Mar 1999 13:44:17 GMT

    【讨论】:

    • 谢谢。我需要导入哪些其他模块才能使其正常工作?我在运行时收到“time.struct_time”对象没有属性“tm_gmtoff”错误。我已经在导入:from datetime import datetime as dt,datetime,timedelta import time from datetime import datetime from dateutil import tz import pytz
    • 顺便说一句,我使用的是 Python 2.7
    • tm_gmtoff 在 Python 3.3 及更高版本中可用:docs.python.org/3/library/time.html#time.struct_time 请参阅我的回答。
    • @user3498593 我已经修改了答案,所以它应该适用于 2.7。我试图将这个答案严格保留在标准库中......但老实说,如果你想正确轻松地处理时间,你真的应该考虑安装 @bernie 建议的pytz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多