@@ -3241,6 +3241,13 @@ date_new(PyTypeObject *type, PyObject *args, PyObject *kw)
32413241 return self ;
32423242}
32433243
3244+ static PyObject * add_datetime_timedelta (PyDateTime_DateTime * date ,
3245+ PyDateTime_Delta * delta ,
3246+ int factor );
3247+ static PyObject *
3248+ add_date_timedelta (PyDateTime_Date * date , PyDateTime_Delta * delta , int negate );
3249+
3250+
32443251static PyObject *
32453252date_fromtimestamp (PyObject * cls , PyObject * obj )
32463253{
@@ -3259,8 +3266,9 @@ date_fromtimestamp(PyObject *cls, PyObject *obj)
32593266 tm .tm_mon + 1 ,
32603267 tm .tm_mday ,
32613268 cls );
3262- PyObject * delta = new_delta (0 , t , 0 , 1 );
3263- return add_datetime_timedelta (date , delta , 1 );
3269+ int normalize = 1 , negate = 0 ;
3270+ PyObject * delta = new_delta (0 , (int )t , 0 , normalize );
3271+ return add_date_timedelta (PyDate_CAST (date ), PyDelta_CAST (delta ), negate );
32643272 }
32653273#endif
32663274
@@ -4084,9 +4092,6 @@ tzinfo_dst(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(dt))
40844092}
40854093
40864094
4087- static PyObject * add_datetime_timedelta (PyDateTime_DateTime * date ,
4088- PyDateTime_Delta * delta ,
4089- int factor );
40904095static PyObject * datetime_utcoffset (PyObject * self , PyObject * );
40914096static PyObject * datetime_dst (PyObject * self , PyObject * );
40924097
@@ -5544,16 +5549,15 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp,
55445549 long us ;
55455550
55465551#ifdef MS_WINDOWS
5547- if (PyFloat_Check (timestamp )) {
5548- if (PyFloat_AsDouble (timestamp ) < 0 ) {
5549- if (_PyTime_ObjectToTimeval (timestamp ,
5550- & timet , & us , _PyTime_ROUND_HALF_EVEN ) == -1 )
5551- return NULL ;
5552-
5553- PyObject * dt = datetime_from_timet_and_us (cls , f , 0 , 0 , tzinfo );
5554- PyObject * delta = new_delta (0 , timet , us , 1 );
5555- return add_datetime_timedelta (date , delta , 1 );
5556- }
5552+ if (PyFloat_Check (timestamp ) && PyFloat_AsDouble (timestamp ) < 0 ) {
5553+ if (_PyTime_ObjectToTimeval (timestamp ,
5554+ & timet , & us , _PyTime_ROUND_HALF_EVEN ) == -1 )
5555+ return NULL ;
5556+
5557+ int normalize = 1 , factor = 1 ;
5558+ PyObject * dt = datetime_from_timet_and_us (cls , f , 0 , 0 , tzinfo );
5559+ PyObject * delta = new_delta (0 , (int )timet , us , normalize );
5560+ return add_datetime_timedelta (PyDateTime_CAST (dt ), PyDelta_CAST (delta ), factor );
55575561 }
55585562#endif
55595563
0 commit comments