Skip to content

Instantly share code, notes, and snippets.

@draganHR
Created March 4, 2021 15:14
Show Gist options
  • Save draganHR/65088f4e3a4c4dff1ebcc1d5080bb0d5 to your computer and use it in GitHub Desktop.
Save draganHR/65088f4e3a4c4dff1ebcc1d5080bb0d5 to your computer and use it in GitHub Desktop.
import timeit
from datetime import datetime
from dateutil import parser as dateutil_parser
from backports.datetime_fromisoformat import datetime_fromisoformat # backport for python < 3.7
strformat = "%Y-%m-%dT%H:%M:%S.%f"
def main():
datetime_now = datetime.utcnow()
str_now = datetime_now.isoformat() # ISO 8601
assert dateutil_parser.parse(str_now) == datetime_now
assert dateutil_parser.isoparse(str_now) == datetime_now
assert datetime.strptime(str_now, strformat) == datetime_now
assert datetime_fromisoformat(str_now) == datetime_now
timeit_globals = {
'datetime': datetime,
'dateutil_parser': dateutil_parser,
'datetime_fromisoformat': datetime_fromisoformat,
'strformat': strformat,
'str_now': str_now,
}
number = 10000
print(timeit.timeit("dateutil_parser.parse(str_now)",
globals=timeit_globals, number=number))
print(timeit.timeit("dateutil_parser.isoparse(str_now)",
globals=timeit_globals, number=number))
print(timeit.timeit("datetime.strptime(str_now, strformat)",
globals=timeit_globals, number=number))
print(timeit.timeit("datetime_fromisoformat(str_now)",
globals=timeit_globals, number=number))
if __name__ == '__main__':
main()
"""
$ python3 python_parsing_datetime.py
0.6838104360003854
0.09205088900034752
0.09850840099989
0.001140635000410839
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment