good ways to convert string into time

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Hank

    good ways to convert string into time

    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
  • Peter Hansen

    #2
    Re: good ways to convert string into time

    Hank wrote:[color=blue]
    >
    > i have a string as follows
    >
    > 18Nov2003:18:23 :43:405[/color]

    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...
    [color=blue]
    > 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?[/color]

    Probably not, actually...

    -Peter

    Comment

    • Sac

      #3
      Re: good ways to convert string into time

      Hank wrote:
      [color=blue]
      > 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[/color]


      Hank,

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

      Excellent reference.


      Comment

      • Jp Calderone

        #4
        Re: good ways to convert string into time

        On Tue, Nov 18, 2003 at 09:58:08AM -0800, Hank wrote:[color=blue]
        > 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?[/color]

        time.strptime

        The official home of the Python Programming Language


        [color=blue]
        >
        > thanks
        > --
        > http://mail.python.org/mailman/listinfo/python-list
        >[/color]

        Comment

        • Gerrit Holl

          #5
          Re: good ways to convert string into time

          <quote name="Hank" date="106914588 8" email="soundwav e56@yahoo.ca">[color=blue]
          > i have a string as follows
          >
          > 18Nov2003:18:23 :43:405[/color]
          [color=blue]
          > 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?[/color]
          </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

          Comment

          • Bengt Richter

            #6
            Re: good ways to convert string into time

            On 18 Nov 2003 09:58:08 -0800, soundwave56@yah oo.ca (Hank) wrote:
            [color=blue]
            >hi,
            >
            >i have a string as follows
            >
            >18Nov2003:18:2 3: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[/color]

            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).g roups()
            mo = monthnums[mo]
            tinfo = map(int, (yr,mo,da,hr,mi n,sec,ms))
            ms = tinfo.pop()
            return time.mktime(tin fo+[0,0,dst])+ms/1000.0
            =============== =============== ==
            [color=blue][color=green][color=darkred]
            >>> import s2t
            >>> s2t.s2t('18Nov2 003:18:23:43:40 5')[/color][/color][/color]
            1069208623.405[color=blue][color=green][color=darkred]
            >>> import time
            >>> time.ctime(s2t. s2t('18Nov2003: 18:23:43:405'))[/color][/color][/color]
            '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.,
            [color=blue][color=green][color=darkred]
            >>> from ut.exactdec import ED
            >>> ED(s2t.s2t('18N ov2003:18:23:43 :405'),'all')[/color][/color][/color]
            ED('1069208623. 404999971389770 5078125')

            That's all the bit info. Looks like a good four 9's below your ms unit.
            [color=blue][color=green][color=darkred]
            >>> ED(s2t.s2t('18N ov2003:18:23:43 :405'),'all').r ound(3)[/color][/color][/color]
            ED('1069208623. 405')


            PS. I think there is a bug in time.mktime -- I accidentally got it trying to find time zero:
            [color=blue][color=green][color=darkred]
            >>> s2t.s2t('01Jan1 970:00:00:00:00 0', 1)[/color][/color][/color]
            25200.0[color=blue][color=green][color=darkred]
            >>> s2t.s2t('31Dec1 969:23:00:00:00 0', 1)[/color][/color][/color]
            21600.0[color=blue][color=green][color=darkred]
            >>> s2t.s2t('31Dec1 969:17:00:00:00 0', 1)[/color][/color][/color]
            0.0[color=blue][color=green][color=darkred]
            >>> s2t.s2t('31Dec1 969:17:00:00:00 0', 0)[/color][/color][/color]
            3600.0[color=blue][color=green][color=darkred]
            >>> s2t.s2t('31Dec1 969:17:00:00:00 0', 1)[/color][/color][/color]
            0.0[color=blue][color=green][color=darkred]
            >>> s2t.s2t('31Dec1 969:16:00:00:00 0', 1)[/color][/color][/color]
            (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

            Comment

            Working...