Convert timedelta to total seconds

后端 未结 3 1346
独厮守ぢ
独厮守ぢ 2020-11-29 01:53

I have a time difference

import time
import datetime

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()         


        
相关标签:
3条回答
  • 2020-11-29 02:34

    You can use mx.DateTime module

    import mx.DateTime as mt
    
    t1 = mt.now() 
    t2 = mt.now()
    print int((t2-t1).seconds)
    
    0 讨论(0)
  • 2020-11-29 02:46

    You have a problem one way or the other with your datetime.datetime.fromtimestamp(time.mktime(time.gmtime())) expression.

    (1) If all you need is the difference between two instants in seconds, the very simple time.time() does the job.

    (2) If you are using those timestamps for other purposes, you need to consider what you are doing, because the result has a big smell all over it:

    gmtime() returns a time tuple in UTC but mktime() expects a time tuple in local time.

    I'm in Melbourne, Australia where the standard TZ is UTC+10, but daylight saving is still in force until tomorrow morning so it's UTC+11. When I executed the following, it was 2011-04-02T20:31 local time here ... UTC was 2011-04-02T09:31

    >>> import time, datetime
    >>> t1 = time.gmtime()
    >>> t2 = time.mktime(t1)
    >>> t3 = datetime.datetime.fromtimestamp(t2)
    >>> print t0
    1301735358.78
    >>> print t1
    time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
    >>> print t2
    1301700663.0
    >>> print t3
    2011-04-02 10:31:03 ### this is UTC+1
    >>> tt = time.time(); print tt
    1301736663.88
    >>> print datetime.datetime.now()
    2011-04-02 20:31:03.882000 ### UTC+11, my local time
    >>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
    2011-04-02 09:31:03.880000 ### UTC
    >>> print time.localtime()
    time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time
    

    You'll notice that t3, the result of your expression is UTC+1, which appears to be UTC + (my local DST difference) ... not very meaningful. You should consider using datetime.datetime.utcnow() which won't jump by an hour when DST goes on/off and may give you more precision than time.time()

    0 讨论(0)
  • 2020-11-29 02:54

    Use timedelta.total_seconds().

    >>> import datetime
    >>> datetime.timedelta(seconds=24*60*60).total_seconds()
    86400.0
    
    0 讨论(0)
提交回复
热议问题