469,929 Members | 1,742 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,929 developers. It's quick & easy.

date and time range checking


there are few of a time periods, for example:
2005-06-08 12:30 -> 2005-06-10 15:30,
2005-06-12 12:30 -> 2005-06-14 15:30

and there is some date and time value:
2005-06-11 12:30

what is the "pythonic" way to check is the date/time value in the given periods range?

something like xrange:
a = xrange(1,5)
b = 3
if b in a:

.... print "OK"
thanks

--
Best regards,
Maksim Kasimov
mailto: ka*****@i.com.ua
Jul 19 '05 #1
2 6233
Maksim Kasimov wrote:
what is the "pythonic" way to check is the date/time value in the given
periods range?


Something like this, though I won't make strong claims of
"pythonicness". If you want to use the "in" keyword you'll want a
custom class and overriding of __contains__.

import time
from datetime import datetime

def make_datetime(s, fmt='%Y-%m-%d %H:%M'):
'''convert string to datetime'''
ts = time.mktime(time.strptime(s, fmt))
return datetime.fromtimestamp(ts)
def inRange(s, ranges):
dt = make_datetime(s)
for begin,end in ranges:
if begin <= dt <= end:
return True
else:
return False
ranges = [(make_datetime(b), make_datetime(e)) for (b,e) in [
('2005-06-08 12:30', '2005-06-10 15:30'),
('2005-06-12 12:30', '2005-06-14 15:30'),
]]

print inRange('2005-06-11 12:30', ranges)
Jul 19 '05 #2
Maksim Kasimov wrote:
there are few of a time periods, for example:
2005-06-08 12:30 -> 2005-06-10 15:30,
2005-06-12 12:30 -> 2005-06-14 15:30

and there is some date and time value:
2005-06-11 12:30

what is the "pythonic" way to check is the date/time value in the given periods range?


import datetime
t1 = datetime.datetime(2005, 6, 8, 12, 30)
t2 = datetime.datetime(2005, 6, 10, 15, 30)
t = datetime.datetime(2005, 6, 9, 14, 00)
if t1 < t < t2: .... print "In range"
....
In range t = datetime.datetime(2005, 6, 8, 14, 00)
if t1 < t < t2: .... print "In range"
....
In range t = datetime.datetime(2005, 6, 7, 14, 00)

if t1 < t < t2: .... print "In range"
....
If you want to use the "in" syntax
class InRange: .... def __init__(self, low, high):
.... self.low = low
.... self.high = high
.... def __contains__(self, obj):
.... return self.low < obj < self.high
.... r = InRange(t1, t2)
datetime.datetime(2005, 6, 7, 14, 00) in r False datetime.datetime(2005, 6, 8, 14, 00) in r True datetime.datetime(2005, 6, 9, 14, 00) in r True datetime.datetime(2005, 6, 9, 18, 00) in r True datetime.datetime(2005, 6, 10, 18, 00) in r False


Andrew
da***@dalkescientific.com

Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by androtech | last post: by
4 posts views Thread by Lynn | last post: by
30 posts views Thread by Dr John Stockton | last post: by
18 posts views Thread by dfetrow410 | last post: by
26 posts views Thread by Lionel B | last post: by
62 posts views Thread by Generic Usenet Account | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.