Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
b5b446d6
Commit
b5b446d6
authored
Aug 01, 2015
by
Robert Collins
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #22932: Fix timezones in email.utils.formatdate.
Patch from Dmitry Shachnev.
parent
6e6c6a88
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
23 deletions
+31
-23
Lib/email/utils.py
Lib/email/utils.py
+7
-23
Lib/test/test_email/test_utils.py
Lib/test/test_email/test_utils.py
+20
-0
Misc/ACKS
Misc/ACKS
+1
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/email/utils.py
View file @
b5b446d6
...
...
@@ -155,30 +155,14 @@ def formatdate(timeval=None, localtime=False, usegmt=False):
# 2822 requires that day and month names be the English abbreviations.
if
timeval
is
None
:
timeval
=
time
.
time
()
if
localtime
:
now
=
time
.
localtime
(
timeval
)
# Calculate timezone offset, based on whether the local zone has
# daylight savings time, and whether DST is in effect.
if
time
.
daylight
and
now
[
-
1
]:
offset
=
time
.
altzone
else
:
offset
=
time
.
timezone
hours
,
minutes
=
divmod
(
abs
(
offset
),
3600
)
# Remember offset is in seconds west of UTC, but the timezone is in
# minutes east of UTC, so the signs differ.
if
offset
>
0
:
sign
=
'-'
else
:
sign
=
'+'
zone
=
'%s%02d%02d'
%
(
sign
,
hours
,
minutes
//
60
)
if
localtime
or
usegmt
:
dt
=
datetime
.
datetime
.
fromtimestamp
(
timeval
,
datetime
.
timezone
.
utc
)
else
:
now
=
time
.
gmtime
(
timeval
)
# Timezone offset is always -0000
if
usegmt
:
zone
=
'GMT'
else
:
zone
=
'-0000'
return
_format_timetuple_and_zone
(
now
,
zone
)
dt
=
datetime
.
datetime
.
utcfromtimestamp
(
timeval
)
if
localtime
:
dt
=
dt
.
astimezone
()
usegmt
=
False
return
format_datetime
(
dt
,
usegmt
)
def
format_datetime
(
dt
,
usegmt
=
False
):
"""Turn a datetime into a date string as specified in RFC 2822.
...
...
Lib/test/test_email/test_utils.py
View file @
b5b446d6
...
...
@@ -136,5 +136,25 @@ class LocaltimeTests(unittest.TestCase):
t1
=
utils
.
localtime
(
t0
)
self
.
assertEqual
(
t1
.
tzname
(),
'EET'
)
class
FormatDateTests
(
unittest
.
TestCase
):
@
test
.
support
.
run_with_tz
(
'Europe/Minsk'
)
def
test_formatdate
(
self
):
timeval
=
time
.
mktime
((
2011
,
12
,
1
,
18
,
0
,
0
,
4
,
335
,
0
))
string
=
utils
.
formatdate
(
timeval
,
localtime
=
False
,
usegmt
=
False
)
self
.
assertEqual
(
string
,
'Thu, 01 Dec 2011 15:00:00 -0000'
)
string
=
utils
.
formatdate
(
timeval
,
localtime
=
False
,
usegmt
=
True
)
self
.
assertEqual
(
string
,
'Thu, 01 Dec 2011 15:00:00 GMT'
)
@
test
.
support
.
run_with_tz
(
'Europe/Minsk'
)
def
test_formatdate_with_localtime
(
self
):
timeval
=
time
.
mktime
((
2011
,
1
,
1
,
18
,
0
,
0
,
6
,
1
,
0
))
string
=
utils
.
formatdate
(
timeval
,
localtime
=
True
)
self
.
assertEqual
(
string
,
'Sat, 01 Jan 2011 18:00:00 +0200'
)
# Minsk moved from +0200 (with DST) to +0300 (without DST) in 2011
timeval
=
time
.
mktime
((
2011
,
12
,
1
,
18
,
0
,
0
,
4
,
335
,
0
))
string
=
utils
.
formatdate
(
timeval
,
localtime
=
True
)
self
.
assertEqual
(
string
,
'Thu, 01 Dec 2011 18:00:00 +0300'
)
if
__name__
==
'__main__'
:
unittest
.
main
()
Misc/ACKS
View file @
b5b446d6
...
...
@@ -1247,6 +1247,7 @@ Jerry Seutter
Pete Sevander
Denis Severson
Ian Seyer
Dmitry Shachnev
Daniel Shahaf
Ha Shao
Mark Shannon
...
...
Misc/NEWS
View file @
b5b446d6
...
...
@@ -66,6 +66,9 @@ Core and Builtins
Library
-------
-
Issue
#
22932
:
Fix
timezones
in
email
.
utils
.
formatdate
.
Patch
from
Dmitry
Shachnev
.
-
Issue
#
23779
:
imaplib
raises
TypeError
if
authenticator
tries
to
abort
.
Patch
from
Craig
Holmquist
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment