Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > simpler increment of time values?

Reply
Thread Tools

simpler increment of time values?

 
 
Vlastimil Brom
Guest
Posts: n/a
 
      07-05-2012
Hi all,
I'd like to ask about the possibilities to do some basic manipulation
on timestamps - such as incrementing a given time (hour.minute -
string) by some minutes.
Very basic notion of "time" is assumed, i.e. dateless,
timezone-unaware, DST-less etc.
I first thought, it would be possible to just add a timedelta to a
time object, but, it doesn't seem to be the case.

The code I came up with (using time and datetime modules) seems rather
convoluted and I would like to ask about some possible more
straightforward alternatives I missed.
The equivalent function (lacking validation) without the (date)time
libraries seems simple enough (for this limited and individual task).
Although it is probably mostly throw-away code, which seems to do what
I need, I'd be interested in better/more elegant... solutions.

# # #
import time
import datetime
import re

print re.sub(r"^0","", (datetime.datetime(*list(time.strptime("8.45",
"%H.%M"))[:6]) + datetime.timedelta(minutes=30)).strftime("%H.%M"))
# 9.15

# # # # # # # # #

def add_minutes(hour_min_str, separator=".", minutes_to_add=0):
h, m = [int(s) for s in hour_min_str.split(separator)]
sum_minutes = h * 60 + m + minutes_to_add
h, m = divmod(sum_minutes, 60)
h = h % 24
return "%s%s%s" % (h, separator, m)

print add_minutes(hour_min_str="8.45", separator='.', minutes_to_add=30)
# 9.15

# # # # # # # # #

Is it true, that timedelta cannot be used with dateless time values?
(Is there some other possibility than the current one, where strptime
actually infers 1. 1. 1900?)
Is there some simpler way to adapt the incompatible output of strptime
as the input of datetime?
Is it possible to get one-digit hours formatted without the leading zero?

Thanks in advance for any suggestions or remarks;
regards,
Vlastimil Brom
 
Reply With Quote
 
 
 
 
rurpy@yahoo.com
Guest
Posts: n/a
 
      07-05-2012
On Wednesday, July 4, 2012 6:29:10 PM UTC-6, Vlastimil Brom wrote:
> Hi all,
> I'd like to ask about the possibilities to do some basic manipulation
> on timestamps - such as incrementing a given time (hour.minute -
> string) by some minutes.
> Very basic notion of "time" is assumed, i.e. dateless,
> timezone-unaware, DST-less etc.
> I first thought, it would be possible to just add a timedelta to a
> time object, but, it doesn't seem to be the case.
>
> The code I came up with (using time and datetime modules) seems rather
> convoluted and I would like to ask about some possible more
> straightforward alternatives I missed.
> The equivalent function (lacking validation) without the (date)time
> libraries seems simple enough (for this limited and individual task).
> Although it is probably mostly throw-away code, which seems to do what
> I need, I'd be interested in better/more elegant... solutions.
>
> # # #
> import time
> import datetime
> import re
>
> print re.sub(r"^0","", (datetime.datetime(*list(time.strptime("8.45",
> "%H.%M"))[:6]) + datetime.timedelta(minutes=30)).strftime("%H.%M"))
> # 9.15
>
> # # # # # # # # #
>
> def add_minutes(hour_min_str, separator=".", minutes_to_add=0):
> h, m = [int(s) for s in hour_min_str.split(separator)]
> sum_minutes = h * 60 + m + minutes_to_add
> h, m = divmod(sum_minutes, 60)
> h = h % 24
> return "%s%s%s" % (h, separator, m)
>
> print add_minutes(hour_min_str="8.45", separator='.', minutes_to_add=30)
> # 9.15
>
> # # # # # # # # #
>
> Is it true, that timedelta cannot be used with dateless time values?
> (Is there some other possibility than the current one, where strptime
> actually infers 1. 1. 1900?)
> Is there some simpler way to adapt the incompatible output of strptime
> as the input of datetime?
> Is it possible to get one-digit hours formatted without the leading zero?
>
> Thanks in advance for any suggestions or remarks;
> regards,
> Vlastimil Brom


If it's any consolation, I had to add a small constant time
delta to all the times in a video subtitles file and my code
ended up looking very much like yours. What should have take
five minutes to write took several hours,

I remain surprised and disappointed that doing something so
simple (read time text into time object, add timedelta, print
result) was so awkward in Python.
 
Reply With Quote
 
 
 
 
rurpy@yahoo.com
Guest
Posts: n/a
 
      07-05-2012
On Wednesday, July 4, 2012 6:29:10 PM UTC-6, Vlastimil Brom wrote:
> Hi all,
> I'd like to ask about the possibilities to do some basic manipulation
> on timestamps - such as incrementing a given time (hour.minute -
> string) by some minutes.
> Very basic notion of "time" is assumed, i.e. dateless,
> timezone-unaware, DST-less etc.
> I first thought, it would be possible to just add a timedelta to a
> time object, but, it doesn't seem to be the case.
>
> The code I came up with (using time and datetime modules) seems rather
> convoluted and I would like to ask about some possible more
> straightforward alternatives I missed.
> The equivalent function (lacking validation) without the (date)time
> libraries seems simple enough (for this limited and individual task).
> Although it is probably mostly throw-away code, which seems to do what
> I need, I'd be interested in better/more elegant... solutions.
>
> # # #
> import time
> import datetime
> import re
>
> print re.sub(r"^0","", (datetime.datetime(*list(time.strptime("8.45",
> "%H.%M"))[:6]) + datetime.timedelta(minutes=30)).strftime("%H.%M"))
> # 9.15
>
> # # # # # # # # #
>
> def add_minutes(hour_min_str, separator=".", minutes_to_add=0):
> h, m = [int(s) for s in hour_min_str.split(separator)]
> sum_minutes = h * 60 + m + minutes_to_add
> h, m = divmod(sum_minutes, 60)
> h = h % 24
> return "%s%s%s" % (h, separator, m)
>
> print add_minutes(hour_min_str="8.45", separator='.', minutes_to_add=30)
> # 9.15
>
> # # # # # # # # #
>
> Is it true, that timedelta cannot be used with dateless time values?
> (Is there some other possibility than the current one, where strptime
> actually infers 1. 1. 1900?)
> Is there some simpler way to adapt the incompatible output of strptime
> as the input of datetime?
> Is it possible to get one-digit hours formatted without the leading zero?
>
> Thanks in advance for any suggestions or remarks;
> regards,
> Vlastimil Brom


If it's any consolation, I had to add a small constant time
delta to all the times in a video subtitles file and my code
ended up looking very much like yours. What should have take
five minutes to write took several hours,

I remain surprised and disappointed that doing something so
simple (read time text into time object, add timedelta, print
result) was so awkward in Python.
 
Reply With Quote
 
John Nagle
Guest
Posts: n/a
 
      07-05-2012
On 7/4/2012 5:29 PM, Vlastimil Brom wrote:
> Hi all,
> I'd like to ask about the possibilities to do some basic manipulation
> on timestamps - such as incrementing a given time (hour.minute -
> string) by some minutes.
> Very basic notion of "time" is assumed, i.e. dateless,
> timezone-unaware, DST-less etc.
> I first thought, it would be possible to just add a timedelta to a
> time object, but, it doesn't seem to be the case.


That's correct. A datetime.time object is a time within a day.
A datetime.date object is a date without a time. A datetime.datetime
object contains both.

You can add a datetime.timedelta object to a datetime.datetime
object, which will yield a datetime.datetime object.

You can also call time.time(), and get the number of seconds
since the epoch (usually 1970-01-01 00:00:00 UTC). That's just
a number, and you can do arithmetic on that.

Adding a datetime.time to a datetime.timedelta isn't that
useful. It would have to return a value error if the result
crossed a day boundary.

John Nagle


 
Reply With Quote
 
rurpy@yahoo.com
Guest
Posts: n/a
 
      07-05-2012
On Thursday, July 5, 2012 11:34:16 AM UTC-6, John Nagle wrote:
>[...]
> You can also call time.time(), and get the number of seconds
> since the epoch (usually 1970-01-01 00:00:00 UTC). That's just
> a number, and you can do arithmetic on that.
>
> Adding a datetime.time to a datetime.timedelta isn't that
> useful.


It certainly is useful and I gave an obvious and real-
world example in my previous post.

> It would have to return a value error if the result
> crossed a day boundary.


Why? When I turn the adjustment knob on my analog
clock it crosses the day boundary from 23:59 to 0:00
with no problem whatsoever. Why is Python unable
to do what billions of clocks do?

Instead I have to convert everything to seconds and
do the same math I would have done in fortran in 1980.
Phew.

Another example of Pythonic "purity beats practicality"
 
Reply With Quote
 
Steven D'Aprano
Guest
Posts: n/a
 
      07-06-2012
On Thu, 05 Jul 2012 11:15:04 -0700, rurpy wrote:

> On Thursday, July 5, 2012 11:34:16 AM UTC-6, John Nagle wrote:
>>[...]
>> You can also call time.time(), and get the number of seconds
>> since the epoch (usually 1970-01-01 00:00:00 UTC). That's just a
>> number, and you can do arithmetic on that.
>>
>> Adding a datetime.time to a datetime.timedelta isn't that
>> useful.

>
> It certainly is useful and I gave an obvious and real- world example in
> my previous post.


Agreed.

A timedelta of less than one day magnitude should be usable with time
objects, and wrap around at midnight. That's a clear and useful extension
to the current functionality.

I can't see a feature request (rejected or otherwise) on the bug tracker.
Perhaps you should raise one for Python 3.4. It will have a better chance
of being accepted if you include a patch, or at least tests.

http://bugs.python.org/



--
Steven
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: simpler increment of time values? Vlastimil Brom Python 0 07-05-2012 01:18 PM
Re: simpler increment of time values? Devin Jeanpierre Python 0 07-05-2012 05:05 AM
Re: simpler increment of time values? Jason Friedman Python 0 07-05-2012 04:57 AM
Re: simpler increment of time values? Mark Lawrence Python 0 07-05-2012 02:35 AM
Re: simpler increment of time values? Chris Angelico Python 0 07-05-2012 01:09 AM



Advertisments