diff --git a/msgpack/ext.py b/msgpack/ext.py index 9694819a..37a1c580 100644 --- a/msgpack/ext.py +++ b/msgpack/ext.py @@ -157,9 +157,10 @@ def to_datetime(self): :rtype: `datetime.datetime` """ utc = datetime.timezone.utc - return datetime.datetime.fromtimestamp(0, utc) + datetime.timedelta( + utcDatetime = datetime.datetime.fromtimestamp(0, utc) + datetime.timedelta( seconds=self.seconds, microseconds=self.nanoseconds // 1000 ) + return utcDatetime.astimezone(tz=None) @staticmethod def from_datetime(dt): diff --git a/msgpack/unpack.h b/msgpack/unpack.h index 58a2f4f5..c409c1b0 100644 --- a/msgpack/unpack.h +++ b/msgpack/unpack.h @@ -355,10 +355,12 @@ static int unpack_callback_ext(unpack_user* u, const char* base, const char* pos return -1; } - py = PyNumber_Add(epoch, d); + PyObject *added = PyNumber_Add(epoch, d); + py = PyObject_CallMethod(added, "astimezone", "O", Py_None); Py_DECREF(epoch); Py_DECREF(d); + Py_DECREF(added); } else { // float PyObject *a = PyFloat_FromDouble((double)ts.tv_nsec);