@@ -299,6 +299,7 @@ clear_current_module(PyInterpreterState *interp, PyObject *expected)
299299#define  TIME_GET_MINUTE          PyDateTime_TIME_GET_MINUTE
300300#define  TIME_GET_SECOND          PyDateTime_TIME_GET_SECOND
301301#define  TIME_GET_MICROSECOND     PyDateTime_TIME_GET_MICROSECOND
302+ #define  TIME_GET_NANOSECOND      PyDateTime_TIME_GET_NANOSECOND
302303#define  TIME_GET_FOLD            PyDateTime_TIME_GET_FOLD
303304#define  TIME_SET_HOUR (o , v )     (PyDateTime_TIME_GET_HOUR(o) = (v))
304305#define  TIME_SET_MINUTE (o , v )   (PyDateTime_TIME_GET_MINUTE(o) = (v))
@@ -307,6 +308,9 @@ clear_current_module(PyInterpreterState *interp, PyObject *expected)
307308    (((o)->data[3] = ((v) & 0xff0000) >> 16), \
308309     ((o)->data[4] = ((v) & 0x00ff00) >> 8), \
309310     ((o)->data[5] = ((v) & 0x0000ff)))
311+ #define  TIME_SET_NANOSECOND (o , v )      \
312+     (((o)->data[6] = ((v) & 0xff00) >> 8), \
313+      ((o)->data[7] = ((v) & 0x00ff)))
310314#define  TIME_SET_FOLD (o , v )   (PyDateTime_TIME_GET_FOLD(o) = (v))
311315
312316/* Delta accessors for timedelta. */ 
@@ -4764,12 +4768,14 @@ time_isoformat(PyObject *op, PyObject *args, PyObject *kw)
47644768
47654769    PyObject  * result ;
47664770    int  us  =  TIME_GET_MICROSECOND (self );
4771+     int  ns  =  TIME_GET_NANOSECOND (self );
47674772    static  const  char  * specs [][2 ] =  {
47684773        {"hours" , "%02d" },
47694774        {"minutes" , "%02d:%02d" },
47704775        {"seconds" , "%02d:%02d:%02d" },
47714776        {"milliseconds" , "%02d:%02d:%02d.%03d" },
47724777        {"microseconds" , "%02d:%02d:%02d.%06d" },
4778+         {"nanoseconds" , "%02d:%02d:%02d.%06d%03d" },
47734779    };
47744780    size_t  given_spec ;
47754781
@@ -4805,7 +4811,7 @@ time_isoformat(PyObject *op, PyObject *args, PyObject *kw)
48054811    else  {
48064812        result  =  PyUnicode_FromFormat (specs [given_spec ][1 ],
48074813                                      TIME_GET_HOUR (self ), TIME_GET_MINUTE (self ),
4808-                                       TIME_GET_SECOND (self ), us );
4814+                                       TIME_GET_SECOND (self ), us ,  ns );
48094815    }
48104816
48114817    if  (result  ==  NULL  ||  !HASTZINFO (self ) ||  self -> tzinfo  ==  Py_None )
0 commit comments