This is a pytimeparse based project with the aim of optimizing functionality and providing stable support.
Copyright (c) 2021 Sergey Klyuykov <onegreyonewhite@mail.ru>
Licensed under the MIT License (see source file pytimeparse2.py for details).
A small Python library to parse various kinds of time expressions, inspired by this StackOverflow question.
The single function pytimeparse2.parse defined in the library parses time expressions like the following:
32m
2h32m
3d2h32m
1w3d2h32m
1w 3d 2h 32m
1 w 3 d 2 h 32 m
4:13
4:13:02
4:13:02.266
2:04:13:02.266
2 days, 4:13:02 (uptime format)
2 days, 4:13:02.266
5hr34m56s
5 hours, 34 minutes, 56 seconds
5 hrs, 34 mins, 56 secs
2 days, 5 hours, 34 minutes, 56 seconds
1.2 m
1.2 min
1.2 mins
1.2 minute
1.2 minutes
172 hours
172 hr
172 h
172 hrs
172 hour
1.24 days
5 d
5 day
5 days
5.6 wk
5.6 week
5.6 weeks
It returns the time as a number of seconds (an integer value if possible, otherwise a floating-point number):
>>> from pytimeparse import parse
>>> parse('1.2 minutes')
72
For months and years, the library does not consider complications such as leap- years and leap-seconds. Instead, it assumes “30 days for a month” and “365 days for a year” as the basis for calculations with those units.
2 mo
2 months
3y
3 years
1y2mo3w4d5h6m7s8ms
For better capability with dates, use keyword as_timedelta=True which mark for function returns value as datetime.timedelta or dateutil.relitivedelta.relativedelta (if installed):
>>> from pytimeparse import parse
>>> parse('24h', as_timedelta=True)
relativedelta(days=+1)
You can also forced disable dateutil support by calling disable_dateutil() before parse(...). For returning support call enable_dateutil().
Notes
A number of seconds can be converted back into a string using the datetime module in the standard library, as noted in this other StackOverflow question:
>>> from pytimeparse import parse
>>> import datetime
>>> parse('1 day, 14:20:16')
138016
>>> str(datetime.timedelta(seconds=138016))
'1 day, 14:20:16'
Future work
Speed up with Cython for some python versions.
Use github actions for testing and releasing.
Metadata
Release files for pytimeparse2 1.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytimeparse2-1.7.1.tar.gz | 10.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytimeparse2-1.7.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.6 kB
Release files / pytimeparse2-1.7.1.tar.gz
| Download URL | pytimeparse2-1.7.1.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
98668cdcba4890e1789e432e8ea0059ccf72402f13f5d52be15bdfaeb3a8b253
|
|
BLAKE2b-256 checksum How to use checksums |
1910cc63fecd69905eb4d300fe71bd580e4a631483e9f53fdcb8c0ad345ce832
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.9.6 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.10.1 urllib3/1.26.14 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.15
|
Release files / pytimeparse2-1.7.1-py3-none-any.whl
| Download URL | pytimeparse2-1.7.1-py3-none-any.whl |
|---|---|
| Size | 6.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a162ea6a7707fd0bb82dd99556efb783935f51885c8bdced0fce3fffe85ab002
|
|
BLAKE2b-256 checksum How to use checksums |
179e85abf91ef5df452f56498927affdb7128194d15644084f6c6722477c305b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.9.6 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.10.1 urllib3/1.26.14 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.15
|