good ways to convert string into time

Discussion in 'Python' started by Hank, Nov 18, 2003.

  1. Hank

    Hank Guest

    hi,

    i have a string as follows

    18Nov2003:18:23:43:405

    Is there an easy way to convert that to absolute time? What i really
    want to do is to parse these times from a log file and do time
    comparisons, averages, stop minus start (elapsed).

    Probably create my own conversion table i guess?

    thanks
     
    Hank, Nov 18, 2003
    #1
    1. Advertising

  2. Hank

    Peter Hansen Guest

    Hank wrote:
    >
    > i have a string as follows
    >
    > 18Nov2003:18:23:43:405


    It's a minor point, but what happens for days-of-the-month that are
    less than 10? Leading zero, or one character shorter? Same question
    goes for the other fields, I suppose...

    > Is there an easy way to convert that to absolute time? What i really
    > want to do is to parse these times from a log file and do time
    > comparisons, averages, stop minus start (elapsed).
    >
    > Probably create my own conversion table i guess?


    Probably not, actually...

    -Peter
     
    Peter Hansen, Nov 18, 2003
    #2
    1. Advertising

  3. Hank

    Gerrit Holl Guest

    <quote name="Hank" date="1069145888" email="">
    > i have a string as follows
    >
    > 18Nov2003:18:23:43:405


    > Is there an easy way to convert that to absolute time? What i really
    > want to do is to parse these times from a log file and do time
    > comparisons, averages, stop minus start (elapsed).
    >
    > Probably create my own conversion table i guess?

    </quote>

    You can use time.strptime:
    strptime(string, format) -> struct_time

    Parse a string to a time tuple according to a format specification.
    See the library reference manual for formatting codes (same as strftime()).

    Gerrit.

    --
    Mozilla _is_ the web: it grows faster than you can download it.
    1011001 1101111 1110101 1110010 1110011 0101100
    1000111 1100101 1110010 1110010 1101001 1110100
     
    Gerrit Holl, Nov 18, 2003
    #3
  4. Hank

    Jp Calderone Guest

    On Tue, Nov 18, 2003 at 09:58:08AM -0800, Hank wrote:
    > hi,
    >
    > i have a string as follows
    >
    > 18Nov2003:18:23:43:405
    >
    > Is there an easy way to convert that to absolute time? What i really
    > want to do is to parse these times from a log file and do time
    > comparisons, averages, stop minus start (elapsed).
    >
    > Probably create my own conversion table i guess?


    time.strptime

    http://www.python.org/doc/lib/module-time.html


    >
    > thanks
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >
     
    Jp Calderone, Nov 18, 2003
    #4
  5. Hank

    Sac Guest

    Hank wrote:

    > hi,
    >
    > i have a string as follows
    >
    > 18Nov2003:18:23:43:405
    >
    > Is there an easy way to convert that to absolute time? What i really
    > want to do is to parse these times from a log file and do time
    > comparisons, averages, stop minus start (elapsed).
    >
    > Probably create my own conversion table i guess?
    >
    > thanks



    Hank,

    A source that may be of interest to you is "Text Processing in Python"
    by Dr. David Mertz.

    Excellent reference.
     
    Sac, Nov 18, 2003
    #5
  6. On 18 Nov 2003 09:58:08 -0800, (Hank) wrote:

    >hi,
    >
    >i have a string as follows
    >
    >18Nov2003:18:23:43:405
    >
    >Is there an easy way to convert that to absolute time? What i really
    >want to do is to parse these times from a log file and do time
    >comparisons, averages, stop minus start (elapsed).
    >
    >Probably create my own conversion table i guess?
    >
    >thanks


    Quick and dirty using the time module (and re to split your string)
    Not tested beyond what your see here!

    ====< s2t.py >==================
    import time,re
    rxo = re.compile(r'(\d+)([a-zA-Z]+)(\d+):(\d+):(\d+):(\d+):(\d+)')
    monthnums = dict([(mo,i+1) for i,mo in enumerate(
    'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split())])
    def s2t(s, dst=-1): # guess daylight svgs
    da,mo,yr,hr,min,sec,ms = rxo.search(s).groups()
    mo = monthnums[mo]
    tinfo = map(int, (yr,mo,da,hr,min,sec,ms))
    ms = tinfo.pop()
    return time.mktime(tinfo+[0,0,dst])+ms/1000.0
    ================================

    >>> import s2t
    >>> s2t.s2t('18Nov2003:18:23:43:405')

    1069208623.405
    >>> import time
    >>> time.ctime(s2t.s2t('18Nov2003:18:23:43:405'))

    'Tue Nov 18 18:23:43 2003'

    IOW, s2t converts your time info to a floating point number in seconds from the epoch,
    which e.g., time.ctime and other time functions can use.

    The milliseconds (I assumed) are ignored by ctime, but I tacked them on in the number returned.
    (Note that floating point won't represent all decimals accurately, but it should be good rounded
    to ms, e.g.,

    >>> from ut.exactdec import ED
    >>> ED(s2t.s2t('18Nov2003:18:23:43:405'),'all')

    ED('1069208623.4049999713897705078125')

    That's all the bit info. Looks like a good four 9's below your ms unit.

    >>> ED(s2t.s2t('18Nov2003:18:23:43:405'),'all').round(3)

    ED('1069208623.405')


    PS. I think there is a bug in time.mktime -- I accidentally got it trying to find time zero:

    >>> s2t.s2t('01Jan1970:00:00:00:000', 1)

    25200.0
    >>> s2t.s2t('31Dec1969:23:00:00:000', 1)

    21600.0
    >>> s2t.s2t('31Dec1969:17:00:00:000', 1)

    0.0
    >>> s2t.s2t('31Dec1969:17:00:00:000', 0)

    3600.0
    >>> s2t.s2t('31Dec1969:17:00:00:000', 1)

    0.0
    >>> s2t.s2t('31Dec1969:16:00:00:000', 1)

    (boom)

    I got:

    The instruction at "0x7802a7ff" referenced memory at "0x00000000". The memory
    could not be "read".

    That shouldn't happen no matter what garbage I type as args, ISTM ;-/
    Guess I'll post a plainer mktime example separately.

    Regards,
    Bengt Richter
     
    Bengt Richter, Nov 18, 2003
    #6
    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. bobsled

    What good ways?

    bobsled, Apr 25, 2004, in forum: C++
    Replies:
    2
    Views:
    303
    Daniel T.
    Apr 26, 2004
  2. Replies:
    12
    Views:
    555
    Keith Thompson
    Mar 10, 2006
  3. Replies:
    1
    Views:
    837
    Paul Boddie
    Mar 11, 2007
  4. Ruwan Budha
    Replies:
    4
    Views:
    1,202
    Kirk Haines
    Mar 9, 2011
  5. Guest
    Replies:
    2
    Views:
    193
    J. Gleixner
    Oct 1, 2004
Loading...

Share This Page