classification
Title: Windows: datetime.datetime.now() raises an OverflowError for date after year 2038
Type: behavior Stage:
Components: Interpreter Core, Windows Versions: Python 3.8, Python 3.7, Python 3.5
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Petter S, belopolsky, josh.r, paul.moore, python-dev, steve.dower, thatiparthy, tim.golden, vmurashev, vstinner, zach.ware
Priority: normal Keywords: 3.5regression

Created on 2015-09-17 19:25 by vmurashev, last changed 2018-11-22 07:53 by thatiparthy. This issue is now closed.

Messages (16)
msg250914 - (view) Author: Vitaly Murashev (vmurashev) * Date: 2015-09-17 19:25
Current time on my machine with Windows7x64 is set to year 2045 for test purposes.
Since Python3.5(amd64) I have an OverflowError when I am trying to call datetime.datetime.now()

It looks like a regress since there was no such error on Python3.4.3

Could anyone please give me a note, whether it would be reasonable for me to wait for a patch in Python3.5.x, or such behavior is common since 3.5 and should not use it in my 'strange' case at all ? 

A bit of details:

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.now()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: timestamp too large to convert to C _PyTime_t
>>>

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2045, 4, 2, 2, 42, 8, 359375)
>>>
msg250925 - (view) Author: Josh Rosenberg (josh.r) * (Python triager) Date: 2015-09-17 23:36
It looks like between 3.4.3 and 3.5, datetime_best_possible changed from using _PyTime_gettimeofday with a _PyTime_timeval to using _PyTime_AsTimeval with struct timeval. The difference is that _PyTime_timeval appears to have been defined with a proper time_t for secs, where struct timeval is defined (on Windows) with a long which is still 32 bits on Windows, so we reintroduced the Y2K38 problem.

The bug was introduced while trying to support #22117: "Rewrite pytime.h to work on nanoseconds" in reve93eeadef0c3: https://hg.python.org/cpython/rev/e93eeadef0c3
msg250963 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-09-18 11:27
New changeset 203134592edf by Victor Stinner in branch 'default':
Issue #25155: Add _PyTime_AsTimevalTime_t() function
https://hg.python.org/cpython/rev/203134592edf
msg250967 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-09-18 11:56
New changeset 4ca99a0a18e4 by Victor Stinner in branch '3.5':
Issue #25155: Add _PyTime_AsTimevalTime_t() function
https://hg.python.org/cpython/rev/4ca99a0a18e4
msg250968 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2015-09-18 11:57
Oh wow, I didn't expect such much headaches when I worked on unifiying the code to handle timestamps in the C part of CPython...

> The bug was introduced while trying to support #22117: "Rewrite pytime.h to work on nanoseconds" in reve93eeadef0c3: https://hg.python.org/cpython/rev/e93eeadef0c3

Yeah, the changeset e93eeadef0c3 was the last change to drop the last function of the old PyTime.

Well... in fact, I also had to keep _PyTime_ObjectToTime_t() and _PyTime_ObjectToTimeval() for the exact same reason: support timestamp after the year 2038 on Windows.

Right, the tv_sec field of a timeval structure on Windows has the C type long, whereas it has the type time_t on all other platforms...

I fixed the bug in Python 3.5 and 3.6. Thanks for your bug report. I didn't expect to test year 2038 bug on the latest release, thanks time traveler :-)
msg250969 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-09-18 11:59
New changeset 5bfcccf229c4 by Victor Stinner in branch '3.5':
Issue #25155: document the bugfix in Misc/NEWS
https://hg.python.org/cpython/rev/5bfcccf229c4
msg250971 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-09-18 12:22
New changeset f1cc1f379b00 by Victor Stinner in branch '3.5':
Issue #25155: Fix _PyTime_Divide() rounding
https://hg.python.org/cpython/rev/f1cc1f379b00
msg320431 - (view) Author: Petter S (Petter S) * Date: 2018-06-25 17:52
I get this error when starting the interpreter in Windows subsystem for Linux (WSL). 

I am using Python 2.7.15rc1

$ python --version
Python 2.7.15rc1
$ python
Fatal Python error: _Py_InitializeMainInterpreter: can't initialize time                                                                                                                                          OverflowError: timestamp too large to convert to C _PyTime_t                                                                                                                                                                                                                                                                                                                                                                        Current thread 0x00007fe547231080 (most recent call first):                                                                                                                                                       Aborted (core dumped)
msg320432 - (view) Author: Petter S (Petter S) * Date: 2018-06-25 17:55
For Python 3:

$ python3 --version
Python 3.7.0b3
$ python3
Fatal Python error: _Py_InitializeMainInterpreter: can't initialize time
OverflowError: timestamp too large to convert to C _PyTime_t

Current thread 0x00007f0232c21080 (most recent call first):
Aborted (core dumped)
msg320441 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-06-25 21:06
> I get this error when starting the interpreter in Windows subsystem for Linux (WSL).

This bug is currently closed, please open a new bug.

About your issue. I'm not sure if Windows subsystem for Linux is officially supported. How did you install Python 2.7 and 3.7? Are you testing 32-bit or 64-bit Python? (Again, please answer in your new issue.)
msg320447 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-06-25 22:05
I tried 64-bit builds of Python 2.7 and 3.7rc1 (binaries from python.org) on Windows 10 on year 2045: start with no error, time.time() and datetime.datetime.now() don't fail.

I tried Python 2.7.12 and 3.5.2 on Ubuntu 16.04 in WSL on my Windows 10: same, start with no error, time.time() and datetime.datetime.now() don't fail. It's 64-bit Ubuntu with 64-bit binaries for Python 2 and Python 3 (check sys.maxsize).

I even compiled Python 2.7.15 and 3.7rc1 on Ubuntu 16.04 in WSL on my Windows 10: same again, start with no error, time.time() and datetime.datetime.now() don't fail. Python 2 and 3 have been compiled in 64-bit mode, since it's a 64-bit Ubuntu.

Everything is fine. I failed to reproduce your bug.
msg320473 - (view) Author: Petter S (Petter S) * Date: 2018-06-26 07:26
I also compiled Python myself on WSL.

The bug seemed to appear after computer had been running for a while. Before that, the interpreters were working normally. And after rebooting the problem disappeared.
msg320476 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-06-26 08:06
I created bpo-33965: [Windows WSL] Fatal Python error: _Py_InitializeMainInterpreter: can't initialize time, after year 2038.
msg330231 - (view) Author: Srinivas Reddy Thatiparthy(శ్రీనివాస్ రెడ్డి తాటిపర్తి) (thatiparthy) * Date: 2018-11-22 06:44
This bug is happening for 3.6 too.  Please see below,

18:14 $ python --version
Python 3.6.3
(upwork) ✔ ~/workspace/personal/assignment [master|✔] 
18:16 $ pip install --upgrade pip
Exception:
Traceback (most recent call last):
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/commands/install.py", line 324, in run
    requirement_set.prepare_files(finder)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/req/req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/req/req_set.py", line 487, in _prepare_file
    req_to_install, finder)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/req/req_set.py", line 428, in _check_skip_installed
    req_to_install, upgrade_allowed)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/index.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/index.py", line 423, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/index.py", line 568, in _get_pages
    page = self._get_page(location)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/index.py", line 683, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/index.py", line 792, in get_page
    "Cache-Control": "max-age=600",
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py", line 488, in get
    return self.request('GET', url, **kwargs)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/download.py", line 386, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py", line 596, in send
    r = adapter.send(request, **kwargs)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 595, in urlopen
    chunked=chunked)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 363, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py", line 1239, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py", line 1285, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py", line 1234, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py", line 1026, in _send_output
    self.send(msg)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/http/client.py", line 964, in send
    self.connect()
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/connection.py", line 167, in connect
    conn = self._new_conn()
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/connection.py", line 142, in _new_conn
    (self.host, self.port), self.timeout, **extra_kw)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/util/connection.py", line 85, in create_connection
    sock.settimeout(timeout)
OverflowError: timestamp too large to convert to C _PyTime_t
You are using pip version 9.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
msg330232 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-22 07:45
Hi,

"""
This bug is happening for 3.6 too.  Please see below,
(...)
  File "/home/dtdev/virtual/upwork/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/util/connection.py", line 85, in create_connection
    sock.settimeout(timeout)
OverflowError: timestamp too large to convert to C _PyTime_t
"""

This error is different: the error occurs on socket.socket.settimeout() and comes from urllib3, not from the Python standard library. You should report this traceback to urllib3.
msg330234 - (view) Author: Srinivas Reddy Thatiparthy(శ్రీనివాస్ రెడ్డి తాటిపర్తి) (thatiparthy) * Date: 2018-11-22 07:53
Yikes, Sorry for the spam. I should have double checked.
History
Date User Action Args
2018-11-22 07:53:26thatiparthysetmessages: + msg330234
2018-11-22 07:45:19vstinnersetmessages: + msg330232
2018-11-22 06:44:15thatiparthysetnosy: + thatiparthy
messages: + msg330231
2018-06-26 08:06:13vstinnersetmessages: + msg320476
2018-06-26 07:26:49Petter Ssetmessages: + msg320473
2018-06-25 22:05:37vstinnersetmessages: + msg320447
2018-06-25 21:06:00vstinnersetmessages: + msg320441
2018-06-25 17:55:37Petter Ssetmessages: + msg320432
2018-06-25 17:52:07Petter Ssetnosy: + Petter S

messages: + msg320431
versions: + Python 3.7, Python 3.8
2015-09-21 07:18:51vstinnersetkeywords: + 3.5regression
2015-09-18 12:22:44python-devsetmessages: + msg250971
2015-09-18 12:00:51vstinnersetstatus: open -> closed
resolution: fixed
2015-09-18 12:00:45vstinnersettitle: datetime.datetime.now() raises -> Windows: datetime.datetime.now() raises an OverflowError for date after year 2038
2015-09-18 11:59:39python-devsetmessages: + msg250969
2015-09-18 11:57:17vstinnersetmessages: + msg250968
2015-09-18 11:56:14python-devsetmessages: + msg250967
2015-09-18 11:27:03python-devsetnosy: + python-dev
messages: + msg250963
2015-09-17 23:36:02josh.rsetnosy: + josh.r
messages: + msg250925
2015-09-17 19:51:22ethan.furmansetnosy: + belopolsky
2015-09-17 19:34:27zach.waresetnosy: + vstinner
2015-09-17 19:25:40vmurashevcreate