You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
GitHub fields:
assignee=Noneclosed_at=<Date2012-03-13.12:38:43.420>created_at=<Date2012-03-03.00:10:21.634>labels= ['library']
title='Factorize code to convert int/float to time_t, timeval or timespec'updated_at=<Date2012-03-13.23:20:38.655>user='https://github.com/vstinner'
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.
Activity
vstinner commentedon Mar 3, 2012
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.
vstinner commentedon Mar 5, 2012
Alexander: No complain if I remove _time.c?
python-dev commentedon Mar 13, 2012
New changeset 1e9cc1a03365 by Victor Stinner in branch 'default':
Close bpo-14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
http://hg.python.org/cpython/rev/1e9cc1a03365
python-dev commentedon Mar 13, 2012
New changeset ed73006bac42 by Victor Stinner in branch 'default':
Issue bpo-14180: Remove commented code
http://hg.python.org/cpython/rev/ed73006bac42
python-dev commentedon Mar 13, 2012
New changeset 1eaf6e899f02 by Victor Stinner in branch 'default':
Issue bpo-14180: Fix select.select() compilation on BSD and a typo in kqueue_queue_control()
http://hg.python.org/cpython/rev/1eaf6e899f02
python-dev commentedon Mar 13, 2012
New changeset cb1c877a27f2 by Victor Stinner in branch 'default':
Issue bpo-14180: Fix another typo in kqueue_queue_control()
http://hg.python.org/cpython/rev/cb1c877a27f2
python-dev commentedon Mar 13, 2012
New changeset 760cf150bb99 by Victor Stinner in branch 'default':
Issue bpo-14180: Fix pythoncore.vcproj, Modules/_time.[ch] have been removed
http://hg.python.org/cpython/rev/760cf150bb99
python-dev commentedon Mar 13, 2012
New changeset 9d69a2418d80 by Victor Stinner in branch 'default':
Issue bpo-14180: Fix an invalid rounding when compiler optimization are enabled
http://hg.python.org/cpython/rev/9d69a2418d80
python-dev commentedon Mar 13, 2012
New changeset 5d6a5c5a4ebe by Victor Stinner in branch 'default':
Issue bpo-14180: datetime.date.fromtimestamp(), datetime.datetime.fromtimestamp()
http://hg.python.org/cpython/rev/5d6a5c5a4ebe
New changeset 706689b2d678 by Victor Stinner in branch 'default':
Issue bpo-14180: TestDateTime.test_microsecond_rounding() handles localtime() and
http://hg.python.org/cpython/rev/706689b2d678
New changeset a0d101220f96 by Victor Stinner in branch 'default':
Issue bpo-14180: Fix the select module to handle correctly the Windows timeval
http://hg.python.org/cpython/rev/a0d101220f96