From 07999d1449b8673b142d56c9b361b601dd7830d5 Mon Sep 17 00:00:00 2001 From: jswhit Date: Fri, 17 Apr 2020 08:46:27 -0600 Subject: [PATCH] fix for issue #165 --- cftime/_cftime.pyx | 18 ++++++++++++------ test/test_cftime.py | 3 +++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/cftime/_cftime.pyx b/cftime/_cftime.pyx index 612e9d76..b33a6b10 100644 --- a/cftime/_cftime.pyx +++ b/cftime/_cftime.pyx @@ -328,12 +328,13 @@ def num2date(times,units,calendar='standard',\ msg='zero not allowed as a reference year, does not exist in Julian or Gregorian calendars' raise ValueError(msg) - if only_use_cftime_datetimes or not \ - (only_use_python_datetimes and can_use_python_datetime): - cdftime = utime(units, calendar=calendar, - only_use_cftime_datetimes=only_use_cftime_datetimes) - return cdftime.num2date(times) - else: # use python datetime module + use_python_datetime = False + if only_use_python_datetimes and not only_use_cftime_datetimes: + use_python_datetime = True + if not only_use_python_datetimes and not only_use_cftime_datetimes and can_use_python_datetime: + use_python_datetime = True + + if use_python_datetime: # use python datetime module isscalar = False try: times[0] @@ -386,6 +387,11 @@ OverflowError in python datetime, probably because year < datetime.MINYEAR""" return dates[0] else: return np.reshape(np.array(dates), shape) + else: # use cftime datetime + cdftime = utime(units, calendar=calendar, + only_use_cftime_datetimes=only_use_cftime_datetimes) + return cdftime.num2date(times) + def date2index(dates, nctime, calendar=None, select='exact'): diff --git a/test/test_cftime.py b/test/test_cftime.py index 2e8c7194..c1f0a507 100644 --- a/test/test_cftime.py +++ b/test/test_cftime.py @@ -744,6 +744,9 @@ def test_tz_naive(self): d = cftime.num2date(1261440000.015625,units) # on windows only 100 ms precision assert(str(d)[0:24] == '2009-12-22 00:00:00.0156') + # issue #165: make sure python datetime returned + d=num2date(0,units="seconds since 2000-01-01 00:00:00",only_use_cftime_datetimes=False) + assert isinstance(d, datetime) class TestDate2index(unittest.TestCase):