How to get the seconds since epoch from the time + date output of gmtime()?

后端 未结 6 402
野性不改
野性不改 2020-12-02 07:14

How do you do reverse gmtime(), where you put the time + date and get the number of seconds?

I have strings like \'Jul 9, 2009 @ 20:02:58 UTC\'

相关标签:
6条回答
  • 2020-12-02 07:36
    t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")
    
    0 讨论(0)
  • 2020-12-02 07:44

    Note that time.gmtime maps timestamp 0 to 1970-1-1 00:00:00.

    In [61]: import time       
    In [63]: time.gmtime(0)
    Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
    

    time.mktime(time.gmtime(0)) gives you a timestamp shifted by an amount that depends on your locale, which in general may not be 0.

    In [64]: time.mktime(time.gmtime(0))
    Out[64]: 18000.0
    

    The inverse of time.gmtime is calendar.timegm:

    In [62]: import calendar    
    In [65]: calendar.timegm(time.gmtime(0))
    Out[65]: 0
    
    0 讨论(0)
  • 2020-12-02 07:46

    If you got here because a search engine told you this is how to get the Unix timestamp, stop reading this answer. Scroll down one.

    If you want to reverse time.gmtime(), you want calendar.timegm().

    >>> calendar.timegm(time.gmtime())
    1293581619.0
    

    You can turn your string into a time tuple with time.strptime(), which returns a time tuple that you can pass to calendar.timegm():

    >>> import calendar
    >>> import time
    >>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
    1247169778
    

    More information about calendar module here

    0 讨论(0)
  • 2020-12-02 07:46

    Use the time module:

    epoch_time = int(time.time())
    
    0 讨论(0)
  • 2020-12-02 07:48
    ep = datetime.datetime(1970,1,1,0,0,0)
    x = (datetime.datetime.utcnow()- ep).total_seconds()
    

    This should be different from int(time.time()), but it is safe to use something like x % (60*60*24)

    datetime — Basic date and time types:

    Unlike the time module, the datetime module does not support leap seconds.

    0 讨论(0)
  • 2020-12-02 07:52

    There are two ways, depending on your original timestamp:

    mktime() and timegm()

    http://docs.python.org/library/time.html

    0 讨论(0)
提交回复
热议问题