This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年08月21日 05:15 by trent, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (10) | |||
|---|---|---|---|
| msg168741 - (view) | Author: Trent Nelson (trent) * (Python committer) | Date: 2012年08月21日 05:15 | |
On the FreeBSD 8.2 build slave: ====================================================================== ERROR: test_localtime_daylight_false_dst_true (test_utils.LocaltimeTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/test/test_email/test_utils.py", line 86, in test_localtime_daylight_false_dst_true t1 = utils.localtime(t0, isdst=1) File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/email/utils.py", line 397, in localtime seconds = time.mktime(tm) OverflowError: mktime argument out of range ====================================================================== ERROR: test_localtime_daylight_true_dst_true (test_utils.LocaltimeTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/test/test_email/test_utils.py", line 79, in test_localtime_daylight_true_dst_true t1 = utils.localtime(t0, isdst=1) File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/email/utils.py", line 397, in localtime seconds = time.mktime(tm) OverflowError: mktime argument out of range ---------------------------------------------------------------------- Placeholder issue, haven't looked into it in detail yet. |
|||
| msg168743 - (view) | Author: Trent Nelson (trent) * (Python committer) | Date: 2012年08月21日 05:31 | |
Narrowed it down to the following snippet: >>> time.mktime((2012, 3, 12, 1, 1, 0, 0, 72, -1)) 1331514060.0 [70780 refs] >>> time.mktime((2012, 3, 12, 1, 1, 0, 0, 72, 1)) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: mktime argument out of range [70832 refs] On all my FreeBSD boxes, that latter invocation always raises an OverflowError. |
|||
| msg168747 - (view) | Author: Trent Nelson (trent) * (Python committer) | Date: 2012年08月21日 06:47 | |
All my servers are set to use UTC, which affects how FreeBSD (and other BSDs) treat the isdst param in struct tm in mktime:
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(int argc, char **argv)
{
struct tm tm1, tm2;
time_t t1, t2;
memset((void *)&tm1, 0, sizeof(struct tm));
memset((void *)&tm2, 0, sizeof(struct tm));
// UTC
setenv("TZ", "UTC", 1);
tzset();
tm1.tm_sec = 0;
tm1.tm_min = 1;
tm1.tm_hour = 1;
tm1.tm_mday = 12;
tm1.tm_mon = 3;
tm1.tm_year = 2012;
tm1.tm_wday = -1;
tm1.tm_yday = -1;
tm1.tm_isdst = 1;
t1 = mktime(&tm1);
printf("t1 (UTC): %d\n", t1);
// EST
setenv("TZ", "CET", 1);
tzset();
tm2.tm_sec = 0;
tm2.tm_min = 1;
tm2.tm_hour = 1;
tm2.tm_mday = 12;
tm2.tm_mon = 3;
tm2.tm_year = 2012;
tm2.tm_wday = -1;
tm2.tm_yday = -1;
tm2.tm_isdst = 1;
t2 = mktime(&tm2);
printf("t2 (CET): %d\n", t2);
return 0;
}
% gcc -g test_mktime.c -o test_time && ./test_time
t1 (UTC): -1
t2 (CET): 1162787116
The two tests causing problems are Lib/test/test_email/test_utils.py:
def test_localtime_daylight_false_dst_false(self):
test.support.patch(self, time, 'daylight', False)
t0 = datetime.datetime(2012, 3, 12, 1, 1)
t1 = utils.localtime(t0, isdst=-1)
t2 = utils.localtime(t1)
self.assertEqual(t1, t2)
def test_localtime_daylight_true_dst_true(self):
test.support.patch(self, time, 'daylight', True)
t0 = datetime.datetime(2012, 3, 12, 1, 1)
t1 = utils.localtime(t0, isdst=1)
t2 = utils.localtime(t1)
self.assertEqual(t1, t2)
In order for those tests to work on a *BSD server with a TZ set to UTC, TZ is going to need to be set to something else first, and then tzset() called. Otherwise, mktime() will return -1, which triggers the overflow error.
|
|||
| msg168755 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2012年08月21日 11:40 | |
email.utils.localtime() may reuse the new datetime.datetime.timestamp() method, except that this method doesn't support setting isdst (it is set to -1). |
|||
| msg168760 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2012年08月21日 12:10 | |
This is 3.3 only, as those tests and the function they test were only introduced in 3.3. |
|||
| msg168836 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2012年08月22日 02:03 | |
So you are saying that if the current timezone is UTC, FreeBSD's mktime just arbitrarily returns -1 for any time passed to it with the 'guess the DST flag' value set for is_dst? And for is_dst set to 1 as well? This isn't mentioned on the FreeBSD man page for mktime, as far as I can see. If this is the real problem, we can fix it with the support.run_with_tz decorator, but...compiling and running your program on my linux box, I get -1 in both prints. |
|||
| msg168839 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2012年08月22日 02:13 | |
> So you are saying that if the current timezone is UTC, FreeBSD's mktime > just arbitrarily returns -1 for any time passed to it with the 'guess > the DST flag' value set for is_dst? I don't know about FreeBSD, but I recall seeing a comment in mxDT sources that some systems only allow isdst flag of -1 in mktime. Adding Marc-Andre. |
|||
| msg221856 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2014年06月29日 16:04 | |
Are these tests still failing, can this issue be closed as "out of date" or what? |
|||
| msg221857 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2014年06月29日 16:07 | |
I don't see the issue anymore, I guess that it was fixed. |
|||
| msg330442 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2018年11月26日 15:49 | |
I mark this issue as a duplicate of bpo-35317. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:35 | admin | set | github: 59955 |
| 2018年11月26日 15:49:11 | vstinner | set | superseder: test_email: test_localtime_daylight_false_dst_true() fails depending on the timezone resolution: fixed -> duplicate messages: + msg330442 |
| 2014年06月29日 16:07:03 | vstinner | set | status: open -> closed resolution: fixed messages: + msg221857 |
| 2014年06月29日 16:04:19 | BreamoreBoy | set | nosy:
+ BreamoreBoy messages: + msg221856 versions: + Python 3.4, Python 3.5, - Python 3.3 |
| 2012年08月22日 02:13:03 | belopolsky | set | nosy:
+ lemburg messages: + msg168839 |
| 2012年08月22日 02:03:51 | r.david.murray | set | messages: + msg168836 |
| 2012年08月21日 12:10:05 | r.david.murray | set | versions:
- Python 3.2 nosy: + barry, r.david.murray messages: + msg168760 components: + email |
| 2012年08月21日 11:40:17 | vstinner | set | messages: + msg168755 |
| 2012年08月21日 11:38:58 | vstinner | set | nosy:
+ belopolsky, vstinner |
| 2012年08月21日 06:47:50 | trent | set | messages: + msg168747 |
| 2012年08月21日 05:31:58 | trent | set | messages: + msg168743 |
| 2012年08月21日 05:15:23 | trent | create | |