datetime in microseconds

Robert Dailey rcdailey at gmail.com
Mon Aug 20 17:01:12 EDT 2007


A small off topic question. Why use divmod() instead of the modulus
operator?

On 8/20/07, mroeloffs at gmail.com <mroeloffs at gmail.com> wrote:
>
> On Aug 20, 4:17 pm, mroelo... at gmail.com wrote:
> > On Aug 20, 3:15 pm, John Machin <sjmac... at lexicon.net> wrote:
> >
> >
> >
> > > On Aug 20, 9:52 pm, mroelo... at gmail.com wrote:
> >
> > > > Hi I have a time in microseconds, for example 0x8C905CBA7F84AF4. I
> > > > want this to a normal view in hh:mm:ss DD:MM:YYYY. I tried with
> > > > datetime, but it only takes a max of 1000000 microseconds is there
> > > > another solution?
> >
> > > Your question can be interpreted in two possible ways:
> >
> > > 1. You have an interval or duration (independent of a calendar point)
> > > and you want to express it in years, months, days, hours, etc. This is
> > > not possible, due to the variable number of days in a month. The best
> > > that you can do is express it as days, hours, etc.
> >
> > > >>> microsecs = 0x8C905CBA7F84AF4
> > > >>> secs = microsecs // 1000000 # or round to nearest if you prefer
> > > >>> mins, secs = divmod(secs, 60)
> > > >>> hrs, mins = divmod(mins, 60)
> > > >>> days, hrs = divmod(hrs, 24)
> > > >>> days, hrs, mins, secs
> >
> > > (7326893L, 11L, 1L, 16L)
> >
> > > 2. You want to know the (Gregorian) calendar point that is
> > > 0x8C905CBA7F84AF4 microseconds after some epoch. In this case you need
> > > to specify what the epoch is. Then you can try something like:
> >
> > > >>> datetime.datetime.fromordinal(1) + datetime.timedelta
> (microseconds=microsecs
> >
> > > )
> > > Traceback (most recent call last):
> > >   File "<stdin>", line 1, in <module>
> > > OverflowError: date value out of range
> >
> > > >>> # Whoops!
> > > >>> years_approx = days / 365.25
> > > >>> years_approx
> > > 20059.939767282682
> >
> > > Hmmm, one of us seems to be missing something ...
> >
> > Sorry,  sorry, sorry it was the wrong value, it should be
> > 0xE0E6FAC3FF3AB2.
>
> The solution I made, with thanks to John. Maybe someone a better one??
>     def DecodeDateTime(self,dateTime):
>         dateTime = self.Rotate(dateTime)
>         microsecs = int(hexlify(dateTime),16)
>         microsecs -= 31536000000000           # -1 Year
>         microsecs -= 1123200000000            # -13 Days (magic?)
>         secs = microsecs // 1000000
>         mins, secs = divmod(secs, 60)
>         hrs, mins = divmod(mins, 60)
>         days, hrs = divmod(hrs, 24)
>         timed = datetime.datetime.fromordinal(1) +
> datetime.timedelta(days)
>         return "%02d-%02d-%02d %02d:%02d:%02d"%(timed.day,
> timed.month, timed.year, hrs, mins, secs)
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20070820/a7224bcc/attachment.html>


More information about the Python-list mailing list