date and time range checking

Discussion in 'Python' started by Maksim Kasimov, Jun 2, 2005.

  1. 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:
    Maksim Kasimov, Jun 2, 2005
    #1
    1. Advertising

  2. Maksim Kasimov

    Peter Hansen Guest

    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)
    Peter Hansen, Jun 2, 2005
    #2
    1. Advertising

  3. Maksim Kasimov

    Andrew Dalke Guest

    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
    Andrew Dalke, Jun 2, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Chris Berg
    Replies:
    0
    Views:
    787
    Chris Berg
    Oct 27, 2003
  2. Peter Grison

    Date, date date date....

    Peter Grison, May 28, 2004, in forum: Java
    Replies:
    10
    Views:
    3,250
    Michael Borgwardt
    May 30, 2004
  3. Graeme Longman
    Replies:
    1
    Views:
    302
    Waldemar Osuch
    Aug 4, 2004
  4. Keith Cochrane
    Replies:
    2
    Views:
    610
    Keith Cochrane
    Aug 6, 2006
  5. Summu82
    Replies:
    5
    Views:
    861
    Richard Heathfield
    Jun 7, 2006
Loading...

Share This Page