Skip to content

Commit 8189e88

Browse files
committed
update time_isoformat
1 parent 0b7a81b commit 8189e88

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

Include/datetime.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ typedef struct
131131
((((PyDateTime_DateTime*)(o))->data[7] << 16) | \
132132
(((PyDateTime_DateTime*)(o))->data[8] << 8) | \
133133
((PyDateTime_DateTime*)(o))->data[9])
134+
#define PyDateTime_DATE_GET_NANOSECOND(o) \
135+
(((PyDateTime_DateTime*)(o))->data[10] << 8) | \
136+
((PyDateTime_DateTime*)(o))->data[11])
134137
#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)(o))->fold)
135138
#define PyDateTime_DATE_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO((o)) ? \
136139
((PyDateTime_DateTime *)(o))->tzinfo : Py_None)
@@ -143,6 +146,9 @@ typedef struct
143146
((((PyDateTime_Time*)(o))->data[3] << 16) | \
144147
(((PyDateTime_Time*)(o))->data[4] << 8) | \
145148
((PyDateTime_Time*)(o))->data[5])
149+
#define PyDateTime_TIME_GET_NANOSECOND(o) \
150+
(((PyDateTime_Time*)(o))->data[6] << 8) | \
151+
((PyDateTime_Time*)(o))->data[7])
146152
#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)(o))->fold)
147153
#define PyDateTime_TIME_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO(o) ? \
148154
((PyDateTime_Time *)(o))->tzinfo : Py_None)

Modules/_datetimemodule.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)