Skip to content

Commit 19b6775

Browse files
author
Jeff Whitaker
committed
fix for issue #354
1 parent 06624d3 commit 19b6775

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/cftime/_cftime.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ def date2num(dates, units, calendar=None, has_year_zero=None, longdouble=False):
261261
if unit in ["months", "month"] and calendar != "360_day":
262262
raise ValueError("Units of months only valid for 360_day calendar.")
263263
unit_timedelta = timedelta(microseconds=UNIT_CONVERSION_FACTORS[unit])
264-
can_use_python_basedatetime = _can_use_python_datetime(basedate,calendar)
264+
can_use_python_basedatetime = calendar=='proleptic_gregorian' and _can_use_python_datetime(basedate,calendar)
265265

266266
if can_use_python_basedatetime and all_python_datetimes:
267267
use_python_datetime = True

test/test_cftime.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,16 @@ def roundtrip(delta,eps,units):
943943
times = np.array([1,2,3,np.inf],dtype=np.float64)
944944
result = cftime.num2date(times, 'days since 2000-01-01', 'standard')
945945
np.testing.assert_equal(result, expected)
946+
# issue #354: roundtrip not correct when dates are all python datetime
947+
# instances and calendar not proleptic_gregorian.
948+
datesin = np.array(["0002"],
949+
dtype="datetime64[s]").astype("M8[us]").astype(datetime)
950+
datein = datesin.item()
951+
num = cftime.date2num(datein, "seconds since 2000-01-01", calendar='standard')
952+
dateout = cftime.num2date(num, "seconds since 2000-01-01", calendar='standard')
953+
dateout2 = cftime.datetime(datein.year, datein.month, datein.day,
954+
calendar='standard')
955+
assert(dateout==dateout2)
946956

947957

948958
class TestDate2index(unittest.TestCase):

0 commit comments

Comments
 (0)