Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the standard way to add N seconds to datetime.time in Python?

Given a datetime.time value in Python, is there a standard way to add an integer number of seconds to it, so that 11:34:59 + 3 = 11:35:02, for example?

These obvious ideas don't work:

>>> datetime.time(11, 34, 59) + 3 TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int' >>> datetime.time(11, 34, 59) + datetime.timedelta(0, 3) TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta' >>> datetime.time(11, 34, 59) + datetime.time(0, 0, 3) TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time' 

In the end I have written functions like this:

def add_secs_to_time(timeval, secs_to_add):     secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second     secs += secs_to_add     return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60) 

I can't help thinking that I'm missing an easier way to do this though.

Related

  • python time + timedelta equivalent
like image 904
Paul Stephenson Avatar asked Sep 19 '08 07:09

Paul Stephenson


People also ask

How do I convert seconds to datetime in Python?

Seconds/epoch to Datetime If you want to convert the number of seconds since the epoch to a datetime object, use the fromtimestamp() method of a datetime class.

How do you add minutes and seconds in Python?

Adding hours or minutes or seconds To do time additions, use the timedelta object's arguments to add the individual time components and add the timedelta object with the date object.


1 Answers

You can use full datetime variables with timedelta, and by providing a dummy date then using time to just get the time value.

For example:

import datetime a = datetime.datetime(100,1,1,11,34,59) b = a + datetime.timedelta(0,3) # days, seconds, then other fields. print(a.time()) print(b.time()) 

results in the two values, three seconds apart:

11:34:59 11:35:02 

You could also opt for the more readable

b = a + datetime.timedelta(seconds=3) 

if you're so inclined.


If you're after a function that can do this, you can look into using addSecs below:

import datetime  def addSecs(tm, secs):     fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)     fulldate = fulldate + datetime.timedelta(seconds=secs)     return fulldate.time()  a = datetime.datetime.now().time() b = addSecs(a, 300) print(a) print(b) 

This outputs:

 09:11:55.775695  09:16:55 
like image 105
paxdiablo Avatar answered Oct 19 '22 15:10

paxdiablo