Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 39 additions & 39 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -84,42 +84,42 @@ Parsing a timestamp with no time zone information (e.g., ``2014-01-09T21:48:00``
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
| Module |Python 3.14|Python 3.13|Python 3.12|Python 3.11|Relative slowdown (versus ciso8601, latest Python)|…|Python 3.10|Python 3.9|Python 3.8|
+================================+===========+===========+===========+===========+==================================================+=+===========+==========+==========+
|ciso8601 |26.4 nsec |23.4 nsec |24.5 nsec |25.4 nsec |N/A |…|35.9 nsec |35.6 nsec |37 nsec |
|ciso8601 |69.3 nsec |60.4 nsec |64.8 nsec |59.5 nsec |N/A |…|89.4 nsec |85.7 nsec |93.5 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|backports.datetime_fromisoformat|N/A |N/A |N/A |N/A |0.8x |…|30.3 nsec |30.7 nsec |32 nsec |
|backports.datetime_fromisoformat|N/A |N/A |N/A |N/A |0.9x |…|76.4 nsec |71.6 nsec |79 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|datetime (builtin) |51.5 nsec |48 nsec |54.8 nsec |53.9 nsec |2.0x |…|N/A |N/A |N/A |
|datetime (builtin) |125 nsec |123 nsec |136 nsec |127 nsec |1.8x |…|N/A |N/A |N/A |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|udatetime |269 nsec |277 nsec |277 nsec |280 nsec |10.2x |…|280 nsec |279 nsec |280 nsec |
|udatetime |543 nsec |543 nsec |538 nsec |520 nsec |7.8x |…|544 nsec |544 nsec |553 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|str2date |1.4 usec |1.42 usec |1.59 usec |1.59 usec |52.9x |…|1.62 usec |1.64 usec |1.76 usec |
|python-dateutil |3.14 usec |3.41 usec |4.03 usec |3.46 usec |45.3x |…|4.14 usec |4.16 usec |4.22 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|pendulum |1.74 usec |65.2 nsec |64.8 nsec |64.7 nsec |65.8x |…|64.6 nsec |66.4 nsec |86.4 nsec |
|str2date |3.21 usec |3.28 usec |3.61 usec |3.51 usec |46.3x |…|3.76 usec |3.71 usec |3.91 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|iso8601 |2.13 usec |2.2 usec |2.35 usec |2.1 usec |80.6x |…|2.3 usec |2.31 usec |2.47 usec |
|pendulum |4.19 usec |152 nsec |126 nsec |136 nsec |60.4x |…|148 nsec |145 nsec |181 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|iso8601utils |N/A |N/A |N/A |N/A |61.5x |…|N/A |2.19 usec |2.51 usec |
|iso8601utils |N/A |N/A |N/A |N/A |53.9x |…|N/A |4.62 usec |5.05 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|isodate |2.36 usec |2.52 usec |2.78 usec |2.18 usec |89.3x |…|2.41 usec |2.4 usec |2.49 usec |
|iso8601 |4.97 usec |5.14 usec |5.37 usec |5.33 usec |71.6x |…|5.21 usec |5.25 usec |5.7 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|PySO8601 |3.55 usec |3.79 usec |3.79 usec |3.11 usec |134.6x |…|3.94 usec |3.64 usec |6.79 usec |
|isodate |5.24 usec |5.72 usec |5.9 usec |5.53 usec |75.6x |…|5.61 usec |5.81 usec |6.07 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|aniso8601 |4.32 usec |4.74 usec |4.95 usec |4.37 usec |163.9x |…|5.53 usec |5.19 usec |5.72 usec |
|PySO8601 |9.56 usec |10.2 usec |9.53 usec |7.99 usec |137.9x |…|9.53 usec |9.98 usec |27.8 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|zulu |4.71 usec |4.63 usec |5.12 usec |4.54 usec |178.7x |…|5.17 usec |4.93 usec |5.17 usec |
|aniso8601 |12.2 usec |12.3 usec |12.9 usec |11.7 usec |175.7x |…|15.5 usec |16 usec |15.7 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|python-dateutil |10.3 usec |11.4 usec |12.6 usec |11.9 usec |390.4x |…|14.9 usec |15.3 usec |15.8 usec |
|zulu |12.4 usec |12.5 usec |13.8 usec |13.1 usec |178.3x |…|14.3 usec |14.6 usec |14.3 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|arrow |13.3 usec |13.4 usec |14.7 usec |13.5 usec |503.5x |…|16.7 usec |16.2 usec |17.4 usec |
|arrow |42.5 usec |42.9 usec |42.4 usec |42.5 usec |612.6x |…|49.8 usec |50.1 usec |49.1 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|maya |13.7 usec |10.9 usec |14.7 usec |12.7 usec |520.0x |…|15.7 usec |14.5 usec |16 usec |
|maya |46.6 usec |35.4 usec |42.5 usec |39.1 usec |671.5x |…|44.1 usec |44.8 usec |46.7 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|metomi-isodatetime |335 usec |345 usec |353 usec |359 usec |12687.0x |…|480 usec |468 usec |508 usec |
|metomi-isodatetime |808 usec |852 usec |810 usec |831 usec |11647.5x |…|1.1 msec |1.09 msec |1.11 msec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|moment |487 usec |502 usec |525 usec |503 usec |18471.2x |…|563 usec |559 usec |576 usec |
|moment |1.22 msec |1.3 msec |1.3 msec |1.38 msec |17631.5x |…|1.36 msec |1.4 msec |1.39 msec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+

ciso8601 takes 26.4 nsec, which is **2.0x faster than datetime (builtin)**, the next fastest Python 3.14 parser in this comparison.
ciso8601 takes 69.3 nsec, which is **1.8x faster than datetime (builtin)**, the next fastest Python 3.14 parser in this comparison.

.. </include:benchmark_with_no_time_zone.rst>

Expand All @@ -132,55 +132,55 @@ Parsing a timestamp with time zone information (e.g., ``2014-01-09T21:48:00-05:3
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
| Module |Python 3.14|Python 3.13|Python 3.12|Python 3.11|Relative slowdown (versus ciso8601, latest Python)|…|Python 3.10|Python 3.9|Python 3.8|
+================================+===========+===========+===========+===========+==================================================+=+===========+==========+==========+
|ciso8601 |30.7 nsec |27.8 nsec |27.9 nsec |29.3 nsec |N/A |…|39 nsec |39.4 nsec |40.2 nsec |
|ciso8601 |71.8 nsec |70.3 nsec |75.1 nsec |67.3 nsec |N/A |…|98.3 nsec |92.9 nsec |97.8 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|backports.datetime_fromisoformat|N/A |N/A |N/A |N/A |1.2x |…|46.6 nsec |48.4 nsec |49.1 nsec |
|backports.datetime_fromisoformat|N/A |N/A |N/A |N/A |1.1x |…|103 nsec |99.1 nsec |102 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|datetime (builtin) |81.6 nsec |72.7 nsec |77.8 nsec |68.8 nsec |2.7x |…|N/A |N/A |N/A |
|datetime (builtin) |197 nsec |197 nsec |199 nsec |179 nsec |2.7x |…|N/A |N/A |N/A |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|udatetime |344 nsec |321 nsec |334 nsec |332 nsec |11.2x |…|331 nsec |332 nsec |336 nsec |
|udatetime |661 nsec |638 nsec |664 nsec |643 nsec |9.2x |…|669 nsec |664 nsec |669 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|str2date |1.67 usec |1.73 usec |1.94 usec |1.77 usec |54.2x |…|1.96 usec |1.94 usec |2.08 usec |
|str2date |4.04 usec |3.91 usec |4.38 usec |4.49 usec |56.2x |…|4.66 usec |4.81 usec |4.9 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|pendulum |2.48 usec |104 nsec |104 nsec |104 nsec |80.7x |…|106 nsec |105 nsec |130 nsec |
|python-dateutil |4.95 usec |5.61 usec |6.33 usec |5.73 usec |68.9x |…|6.87 usec |6.85 usec |7.17 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|iso8601 |3.04 usec |3.24 usec |3.42 usec |3.06 usec |98.7x |…|3.17 usec |3.18 usec |3.52 usec |
|pendulum |6.53 usec |202 nsec |200 nsec |210 nsec |91.0x |…|222 nsec |221 nsec |262 nsec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|isodate |3.14 usec |3.16 usec |3.39 usec |2.88 usec |102.3x |…|3.1 usec |3.12 usec |3.26 usec |
|isodate |7.5 usec |7.79 usec |8.26 usec |7.74 usec |104.4x |…|7.76 usec |7.8 usec |8.4 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|iso8601utils |N/A |N/A |N/A |N/A |126.4x |…|N/A |4.98 usec |5.3 usec |
|iso8601 |7.79 usec |7.71 usec |8.37 usec |7.92 usec |108.4x |…|7.65 usec |7.69 usec |7.98 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|PySO8601 |5.11 usec |5.23 usec |5.67 usec |4.75 usec |166.3x |…|5.31 usec |5.23 usec |5.72 usec |
|iso8601utils |N/A |N/A |N/A |N/A |143.3x |…|N/A |13.3 usec |14.4 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|zulu |5.47 usec |5.66 usec |6.08 usec |5.26 usec |177.9x |…|5.85 usec |5.83 usec |5.96 usec |
|PySO8601 |15.8 usec |16 usec |16.7 usec |14.6 usec |219.7x |…|16.1 usec |16.2 usec |16.7 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|aniso8601 |5.96 usec |6.42 usec |7.19 usec |6.18 usec |194.0x |…|7.56 usec |7.26 usec |7.91 usec |
|zulu |16.6 usec |16.2 usec |17.1 usec |15.9 usec |230.9x |…|17.2 usec |17.2 usec |17.4 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|python-dateutil |13.2 usec |14.6 usec |15.6 usec |15.9 usec |428.8x |…|19.7 usec |20 usec |20.6 usec |
|aniso8601 |17.6 usec |17.8 usec |19 usec |17.4 usec |244.8x |…|21.7 usec |22.8 usec |22.8 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|arrow |15.6 usec |16.3 usec |19.5 usec |16.1 usec |507.7x |…|20 usec |19.3 usec |19.9 usec |
|arrow |49 usec |52.1 usec |52 usec |49.7 usec |682.3x |…|58.8 usec |58 usec |58.5 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|maya |15.8 usec |12 usec |14.4 usec |12.4 usec |512.7x |…|15 usec |14.7 usec |15.1 usec |
|maya |54.2 usec |41.4 usec |44.6 usec |39.6 usec |755.5x |…|45.3 usec |45.7 usec |46.1 usec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|metomi-isodatetime |329 usec |346 usec |342 usec |335 usec |10692.8x |…|475 usec |482 usec |487 usec |
|metomi-isodatetime |794 usec |870 usec |806 usec |806 usec |11055.0x |…|1.1 msec |1.09 msec |1.15 msec |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
|moment |❌ |❌ |❌ |❌ |2112732.4x |…|❌ |❌ |❌ |
|moment |❌ |❌ |❌ |❌ |2163866.8x |…|❌ |❌ |❌ |
+--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+

ciso8601 takes 30.7 nsec, which is **2.7x faster than datetime (builtin)**, the next fastest Python 3.14 parser in this comparison.
ciso8601 takes 71.8 nsec, which is **2.7x faster than datetime (builtin)**, the next fastest Python 3.14 parser in this comparison.

.. </include:benchmark_with_time_zone.rst>

.. <include:benchmark_module_versions.rst>

Tested on Linux 6.14.10-orbstack-00291-g1b252bd3edea using the following modules:
Tested on Linux 6.17.4-orbstack-00308-g195e9689a04f using the following modules:

.. code:: python

aniso8601==10.0.1
arrow==1.3.0
arrow==1.4.0
backports.datetime_fromisoformat==2.0.3
ciso8601==2.3.2
ciso8601==2.3.3
iso8601==2.1.0
iso8601utils==0.1.2
isodate==0.7.2
Expand Down