On Aug 20, 4:17 pm, [EMAIL PROTECTED] wrote: > On Aug 20, 3:15 pm, John Machin <[EMAIL PROTECTED]> wrote: > > > > > On Aug 20, 9:52 pm, [EMAIL PROTECTED] 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