summaryrefslogtreecommitdiffstats
path: root/Include/pytime.h
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-18 11:23:02 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-18 11:23:02 (GMT)
commit1e2b6882fc28a3cded227f55e4dc3f937afd678e (patch)
tree761eed5c9da66d8748b6382cd49589850cdf1e49 /Include/pytime.h
parent1bd0b54c74ea7a108e4a7d921bf9ff904c6fa4d7 (diff)
downloadcpython-1e2b6882fc28a3cded227f55e4dc3f937afd678e.zip
cpython-1e2b6882fc28a3cded227f55e4dc3f937afd678e.tar.gz
cpython-1e2b6882fc28a3cded227f55e4dc3f937afd678e.tar.bz2
Issue #25155: Add _PyTime_AsTimevalTime_t() function
On Windows, the tv_sec field of the timeval structure has the type C long, whereas it has the type C time_t on all other platforms. A C long has a size of 32 bits (signed inter, 1 bit for the sign, 31 bits for the value) which is not enough to store an Epoch timestamp after the year 2038. Add the _PyTime_AsTimevalTime_t() function written for datetime.datetime.now(): convert a _PyTime_t timestamp to a (secs, us) tuple where secs type is time_t. It allows to support dates after the year 2038 on Windows. Enhance also _PyTime_AsTimeval_impl() to detect overflow on the number of seconds when rounding the number of microseconds.
Diffstat (limited to 'Include/pytime.h')
-rw-r--r--Include/pytime.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/Include/pytime.h b/Include/pytime.h
index 5de756a..98612e1 100644
--- a/Include/pytime.h
+++ b/Include/pytime.h
@@ -120,6 +120,18 @@ PyAPI_FUNC(int) _PyTime_AsTimeval_noraise(_PyTime_t t,
struct timeval *tv,
_PyTime_round_t round);
+/* Convert a timestamp to a number of seconds (secs) and microseconds (us).
+ us is always positive. This function is similar to _PyTime_AsTimeval()
+ except that secs is always a time_t type, whereas the timeval structure
+ uses a C long for tv_sec on Windows.
+ Raise an exception and return -1 if the conversion overflowed,
+ return 0 on success. */
+PyAPI_FUNC(int) _PyTime_AsTimevalTime_t(
+ _PyTime_t t,
+ time_t *secs,
+ int *us,
+ _PyTime_round_t round);
+
#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE)
/* Convert a timestamp to a timespec structure (nanosecond resolution).
tv_nsec is always positive.