Factorize code to convert int/float to time_t, timeval or timespec #58388
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
assignee = None closed_at = <Date 2012-03-13.12:38:43.420> created_at = <Date 2012-03-03.00:10:21.634> labels = ['library'] title = 'Factorize code to convert int/float to time_t, timeval or timespec' updated_at = <Date 2012-03-13.23:20:38.655> user = 'https://github.com/vstinner'
activity = <Date 2012-03-13.23:20:38.655> actor = 'python-dev' assignee = 'none' closed = True closed_date = <Date 2012-03-13.12:38:43.420> closer = 'python-dev' components = ['Library (Lib)'] creation = <Date 2012-03-03.00:10:21.634> creator = 'vstinner' dependencies =  files = ['24716'] hgrepos =  issue_num = 14180 keywords = ['patch'] message_count = 9.0 messages = ['154811', '154984', '155600', '155601', '155616', '155625', '155631', '155639', '155689'] nosy_count = 5.0 nosy_names = ['georg.brandl', 'gregory.p.smith', 'belopolsky', 'vstinner', 'python-dev'] pr_nums =  priority = 'normal' resolution = 'fixed' stage = 'resolved' status = 'closed' superseder = None type = None url = 'https://bugs.python.org/issue14180' versions = ['Python 3.3']
The text was updated successfully, but these errors were encountered:
There are various ways to convert a Python int/float to a C time_t, timeval or timespec structure. Attached patch factorize code by adding functions to convert a Python object to a C type (time_t, timeval or timespec).
My patch changes how datetime rounds microsecond: round towards zero instead of rounding to nearest with ties going away from zero. I chose this rounding method because it is the method used by int(float) and int(time.time()) is a common in programs (more than round(time.time()). Rounding towards zero avoids also producing timestamps in the future.
On overflow, an OverflowError is now raises instead of a ValueError. I prefer OverflowError over ValueError because it is an implementation detail. For example, time_t is 32 bits on Linux 32 bits, 64 bits on Linux 64 bits or on Windows (32 or 64 bits).
PyTime_ObjectToXXX() functions are part of Python and so can be used by the posix, time, datetime and select modules. The patch removes _time.c, _time.h and timefunc.h because these files were only used for one function (_PyTime_DoubleToTime_t) which is no more used and it required to link a module to _time.c to get this function.
If it is a problem to replace ValueError with OverflowError for backward compatibility, it is easy to adapt the patch to raise ValueError instead.
timedelta*float and timedelta/float rounding method may also be changed.