Converting Matlab's datenum format to Python
Question: I just started moving from Matlab to Python 2.7 and I have some trouble
reading my .mat-files. Time information is stored in Matlab's datenum format.
For those who are not familiar with it:

> A serial date number represents a calendar date as the number of days that
> has passed since a fixed base date. In MATLAB, serial date number 1 is
> January 1, 0000.
>
> MATLAB also uses serial time to represent fractions of days beginning at
> midnight; for example, 6 p.m. equals 0.75 serial days. So the string
> '31-Oct-2003, 6:00 PM' in MATLAB is date number 731885.75.
>
> (taken from the Matlab documentation)

I would like to convert this to Pythons time format and I found [this
tutorial](http://sociograph.blogspot.de/2011/04/how-to-avoid-gotcha-when-
converting.html). In short, the author states that

> If you parse this using python's `datetime.fromordinal(731965.04835648148)`
> then the result might look reasonable [...]

(before any further conversions), which doesn't work for me, since
datetime.fromordinal expects an integer:

    
    
    >>> datetime.fromordinal(731965.04835648148) 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: integer argument expected, got float
    

While I could just round them down for daily data, I actually need to import
minutely time series. Does anyone have a solution for this problem? I would
like to avoid reformatting my .mat files since there's a lot of them and my
colleagues need to work with them as well.

If it helps, [someone else asked for the other way
round](http://stackoverflow.com/questions/8776414/python-datetime-to-matlab-
datenum). Sadly, I'm too new to Python to really understand what is happening
there.

/edit (2012-11-01): This has been fixed in the tutorial posted above.


Answer: You link to the solution, it has a small issue. It is this:

    
    
    python_datetime = datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1) - timedelta(days = 366)
    

a longer explanation can be found
[here](http://sociograph.blogspot.com/2011/04/how-to-avoid-gotcha-when-
converting.html)

