Converting Excel time-format (hours since 1.1.1901)

supercooper supercooper at gmail.com
Fri Dec 7 10:06:57 EST 2007


On Dec 7, 8:15 am, Dirk Hagemann <DirkHagem... at gmail.com> wrote:
> On 7 Dez., 14:34, supercooper <supercoo... at gmail.com> wrote:
>
>
>
> > On Dec 7, 7:20 am, Dirk Hagemann <DirkHagem... at gmail.com> wrote:
>
> > > Hello,
>
> > > From a zone-file of a Microsoft Active Directory integrated DNS server
> > > I get the date/time of the dynamic update entries in a format, which
> > > is as far as I know the hours since january 1st 1901.
> > > For Example: the number 3566839 is 27.11.07 7:00. To calculate this in
> > > Excel I use this:
> > > ="01.01.1901"+(A1/24-(REST(A1;24)/24))+ZEIT(REST(A1;24);0;0)  (put
> > > 3566839 in field A1 and switch the format of the result-field to the
> > > corresponding date-time format).
>
> > > You might guess what I need now: I want to calculate this somehow in
> > > python.
>
> > > Sorry, but I couldn't find anything in the module time or something
> > > else to get this calculated.
>
> > > Does anyone know how to convert this time in python to something
> > > usable or how to convert this formula in python?
>
> > > Thanks a lot and regards
> > > Dirk
>
> > I think you want the xldate_as_tuple function in the xlrd module:
>
> >http://www.lexicon.net/sjmachin/xlrd.htm
>
> > It works like a champ for me:
>
> > >>> import xlrd
> > >>> xlrd.xldate.xldate_as_tuple(38980,0)
>
> > (2006, 9, 20, 0, 0, 0)
>
> > chad!
>
> Thanks so far, that comes close to a solution I think, BUT when I
> enter 3566985 instead of 38980 I get the following error:
> Traceback (most recent call last):
>   File "test.py", line 20, in <module>
>     print xlrd.xldate.xldate_as_tuple(3566985,0)
>   File "C:\Python25\lib\site-packages\xlrd\xldate.py", line 75, in
> xldate_as_tuple
>     raise XLDateTooLarge(xldate)
> xlrd.xldate.XLDateTooLarge: 3566985
>
> Do I have to use another function of this module? My number is 2
> digits shorter than yours. What is 38980 representing?
>
> Dirk

Excel stores dates as floating point
numbers; the number of days (or fraction thereof) since
12/31/1899. So 38980.0 is midnight 9/20/2006. You think your numbers
represent
the number of hours since 1/1/1901?

3,566,985 hrs/24 hrs in a day = ~148,618 days
148,618 days/365 days in a year = ~407 years

Am I doing the math wrong?



More information about the Python-list mailing list