Skip to content

Instantly share code, notes, and snippets.

@Ogaday
Created July 20, 2020 10:25
Show Gist options
  • Save Ogaday/65bb1b2be1a23808b163ae9c25d78d4c to your computer and use it in GitHub Desktop.
Save Ogaday/65bb1b2be1a23808b163ae9c25d78d4c to your computer and use it in GitHub Desktop.
Parsing RFC 822 timestamps

Comparison using the python date format spec to parse RFC-822 date strings vs using dateutil.

In [1]: from timeit import timeit 
   ...: from time_rfc_822 import parse_RFC_822_naive, parse_RFC_822_dateutil 
   ...: sample_date_string = 'Fri, 06 Mar 2020 14:22:22 GMT' 
   ...: %timeit parse_RFC_822_naive(sample_date_string) 
   ...: %timeit parse_RFC_822_dateutil(sample_date_string)                                                                                                                                                                                                                                
17.5 µs ± 805 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
154 µs ± 12.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
python -m time_rfc_822
Naive:
17.657512107998627
Dateutil:
152.03899231600008
from datetime import datetime
import pytz
from dateutil import parser
def parse_RFC_822_naive(timestring: str) -> datetime:
"""Create a datetime from an RFC 822 timestamp string"""
tz = pytz.timezone(timestring[-3:])
return pytz.UTC.normalize(
tz.localize(datetime.strptime(timestring, "%a, %d %b %Y %H:%M:%S %Z"))
)
def parse_RFC_822_dateutil(timestring: str) -> datetime:
"""
Create a datetime from an RFC 822 timestamp string using the dateutil parser.
"""
return pytz.UTC.normalize(parser.parse(timestring))
if __name__ == "__main__":
from timeit import timeit
sample_date_string = "Fri, 06 Mar 2020 14:22:22 GMT"
print("Naive:")
print(timeit('parse_RFC_822_naive(sample_date_string)', globals=globals()))
print("Dateutil:")
print(timeit('parse_RFC_822_dateutil(sample_date_string)', globals=globals()))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment