I have a time difference
import time
import datetime
time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1
Now, how do I find the total number of seconds that passed? diff.seconds doesn’t count days. I could do:
diff.seconds + diff.days * 24 * 3600
Is there a builtin method for this?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Use timedelta.total_seconds().
>>> import datetime >>> datetime.timedelta(seconds=24*60*60).total_seconds() 86400.0
Method 2
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()
Method 3
More compact way to get the difference between two datetime objects and then convert the difference into seconds is shown below (Python 3x):
from datetime import datetime
time1 = datetime.strftime('18 01 2021', '%d %m %Y')
time2 = datetime.strftime('19 01 2021', '%d %m %Y')
difference = time2 - time1
difference_in_seconds = difference.total_seconds()
Method 4
You can use mx.DateTime module
import mx.DateTime as mt t1 = mt.now() t2 = mt.now() print int((t2-t1).seconds)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0