Skip to content

Commit 5d0c598

Browse files
committed
Closes issue #24773: Implement PEP 495 (Local Time Disambiguation).
1 parent 638e622 commit 5d0c598

File tree

7 files changed

+1601
-227
lines changed

7 files changed

+1601
-227
lines changed

Include/datetime.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ typedef struct
8181
typedef struct
8282
{
8383
_PyDateTime_TIMEHEAD
84+
unsigned char fold;
8485
PyObject *tzinfo;
8586
} PyDateTime_Time; /* hastzinfo true */
8687

@@ -108,6 +109,7 @@ typedef struct
108109
typedef struct
109110
{
110111
_PyDateTime_DATETIMEHEAD
112+
unsigned char fold;
111113
PyObject *tzinfo;
112114
} PyDateTime_DateTime; /* hastzinfo true */
113115

@@ -125,6 +127,7 @@ typedef struct
125127
((((PyDateTime_DateTime*)o)->data[7] << 16) | \
126128
(((PyDateTime_DateTime*)o)->data[8] << 8) | \
127129
((PyDateTime_DateTime*)o)->data[9])
130+
#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)o)->fold)
128131

129132
/* Apply for time instances. */
130133
#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0])
@@ -134,6 +137,7 @@ typedef struct
134137
((((PyDateTime_Time*)o)->data[3] << 16) | \
135138
(((PyDateTime_Time*)o)->data[4] << 8) | \
136139
((PyDateTime_Time*)o)->data[5])
140+
#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)o)->fold)
137141

138142
/* Apply for time delta instances */
139143
#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days)
@@ -162,6 +166,11 @@ typedef struct {
162166
PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*);
163167
PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*);
164168

169+
/* PEP 495 constructors */
170+
PyObject *(*DateTime_FromDateAndTimeAndFold)(int, int, int, int, int, int, int,
171+
PyObject*, int, PyTypeObject*);
172+
PyObject *(*Time_FromTimeAndFold)(int, int, int, int, PyObject*, int, PyTypeObject*);
173+
165174
} PyDateTime_CAPI;
166175

167176
#define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI"
@@ -217,10 +226,18 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL;
217226
PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \
218227
min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType)
219228

229+
#define PyDateTime_FromDateAndTimeAndFold(year, month, day, hour, min, sec, usec, fold) \
230+
PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, \
231+
min, sec, usec, Py_None, fold, PyDateTimeAPI->DateTimeType)
232+
220233
#define PyTime_FromTime(hour, minute, second, usecond) \
221234
PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \
222235
Py_None, PyDateTimeAPI->TimeType)
223236

237+
#define PyTime_FromTimeAndFold(hour, minute, second, usecond, fold) \
238+
PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, usecond, \
239+
Py_None, fold, PyDateTimeAPI->TimeType)
240+
224241
#define PyDelta_FromDSU(days, seconds, useconds) \
225242
PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \
226243
PyDateTimeAPI->DeltaType)

0 commit comments

Comments
 (0)