Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

date and time range checking

457 views
Skip to first unread message

Maksim Kasimov

unread,
Jun 2, 2005, 2:11:56 PM6/2/05
to

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

Peter Hansen

unread,
Jun 2, 2005, 2:32:53 PM6/2/05
to
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)

Andrew Dalke

unread,
Jun 2, 2005, 3:38:57 PM6/2/05
to
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

0 new messages