From a69b5b34cd06350275a82b778275680c169d1629 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Wed, 25 Aug 2010 00:45:55 +0000 Subject: #1194222: make parsedate always return RFC2822 four character years. Two character years are now converted to four character years using the Posix standard rule (<68 == 2000, >=68==1900). This makes the parsed date RFC2822 compliant even if the input is not. Patch and test by Jeffrey Finkelstein. --- Lib/email/_parseaddr.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'Lib/email/_parseaddr.py') diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py index 81913a3824..ac2e524401 100644 --- a/Lib/email/_parseaddr.py +++ b/Lib/email/_parseaddr.py @@ -107,6 +107,18 @@ def parsedate_tz(data): tss = int(tss) except ValueError: return None + # Check for a yy specified in two-digit format, then convert it to the + # appropriate four-digit format, according to the POSIX standard. RFC 822 + # calls for a two-digit yy, but RFC 2822 (which obsoletes RFC 822) + # mandates a 4-digit yy. For more information, see the documentation for + # the time module. + if yy < 100: + # The year is between 1969 and 1999 (inclusive). + if yy > 68: + yy += 1900 + # The year is between 2000 and 2068 (inclusive). + else: + yy += 2000 tzoffset = None tz = tz.upper() if tz in _timezones: -- cgit v1.2.1