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: kas...@i.com.ua
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)
> 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