[Numpy-discussion] timeseries - dates prior to 1970

Pierre GM pgmdevlist at gmail.com
Thu Jun 10 22:35:01 EDT 2010


On Jun 10, 2010, at 7:16 PM, Bevan Jenkins wrote:
> Hello,
> 
> I have posted previously about dates prior to 1900 but this seems to be a 
> seperate issue.  The error message is definitley different.
> I can not seem to convert a timseseries from one frequency ('D') to another 
> ('H') when i use dates prior to 1970 as shown below.  This works fine when I 
> use a date after 1970.  Is this something that can be easily fixed or work 
> around that I can use? Thanks


Argh, major bug indeed... For frequencies below days, the reference is 1AD. Above that, the reference is the unix epoch (1970/01/01). When you try to use dates before that epoch with an hourly frequency, you get negative integers that are not properly dealt with... I gonna work on that.
In the meantime, you can use the following (extremely ugly) trick:

>>> s_d = ts.time_series(np.arange(5) + 1,
                         start_date=ts.Date('D', "1969/01/01"))
>>> # This fails: 
>>> # s.convert('H')
>>> # Create s hortcut to dates (to save some __getattr__ time)
>>> d = s_d.dates
>>> # Calculate the offset from the unix epoch
>>> offset = ts.Date('D', year=1970, month=1, day=1) - d[0]
>>> # Create a new temporary series
>>> s_h = s_d
>>> # Add the offset to the dates, so that you're after the epoch
>>> s_h.dates += offset
>>> # Convert to HOURLY
>>> s_h = s_h.convert('H')
>>> # Subtract the offset (don't forget to convert to 'H')
>>> s_h.dates -= offset * 24

Your predicament is far from over now, because you won't be able to print the dates... But that's another bug.
I'll keep you posted when we have some better solutions.





More information about the NumPy-Discussion mailing list