Parse an RFC822, RFC1123, RFC2822, or asctime-style date
(dateString)
| 3311 | registerDateHandler(_parse_date_w3dtf) |
| 3312 | |
| 3313 | def _parse_date_rfc822(dateString): |
| 3314 | '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' |
| 3315 | data = dateString.split() |
| 3316 | if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: |
| 3317 | del data[0] |
| 3318 | if len(data) == 4: |
| 3319 | s = data[3] |
| 3320 | i = s.find('+') |
| 3321 | if i > 0: |
| 3322 | data[3:] = [s[:i], s[i+1:]] |
| 3323 | else: |
| 3324 | data.append('') |
| 3325 | dateString = " ".join(data) |
| 3326 | # Account for the Etc/GMT timezone by stripping 'Etc/' |
| 3327 | elif len(data) == 5 and data[4].lower().startswith('etc/'): |
| 3328 | data[4] = data[4][4:] |
| 3329 | dateString = " ".join(data) |
| 3330 | if len(data) < 5: |
| 3331 | dateString += ' 00:00:00 GMT' |
| 3332 | tm = rfc822.parsedate_tz(dateString) |
| 3333 | if tm: |
| 3334 | return time.gmtime(rfc822.mktime_tz(tm)) |
| 3335 | # rfc822.py defines several time zones, but we define some extra ones. |
| 3336 | # 'ET' is equivalent to 'EST', etc. |
| 3337 | _additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} |
no test coverage detected