months create python timedelta

create - python timedelta months



Cómo construir un objeto timedelta a partir de una cadena simple (5)

Ayer tuve un poco de tiempo en mis manos, así que desarrollé la share en un módulo de Python, agregando algunos formatos de expresión de tiempo más, incluyendo todos los solicitados por .

El código fuente está en github (licencia MIT) para cualquiera que lo desee. También está en PyPI:

pip install pytimeparse

Devuelve el tiempo como una cantidad de segundos:

>>> from pytimeparse.timeparse import timeparse >>> timeparse(''32m'') 1920 >>> timeparse(''2h32m'') 9120 >>> timeparse(''4:13'') 253 >>> timeparse(''5hr34m56s'') 20096 >>> timeparse(''1.2 minutes'') 72

Estoy escribiendo una función que necesita una entrada timedelta para pasarla como una cadena. El usuario debe ingresar algo como "32m" o "2h32m", o incluso "4:13" o "5hr34m56s" ... ¿Hay alguna biblioteca o algo que ya tenga implementado este tipo de cosas?


Para mí, la solución más elegante, sin tener que recurrir a bibliotecas externas como python-dateutil o analizar manualmente la entrada, es utilizar datetime''s poderoso método de análisis de cadenas strptime string de strptime .

from datetime import datetime, timedelta # we specify the input and the format... t = datetime.strptime("05:20:25","%H:%M:%S") # ...and use datetime''s hour, min and sec properties to build a timedelta delta = timedelta(hours=t.hour, minutes=t.minute, seconds=t.second)

Después de esto puedes usar tu objeto timedelta como normalmente, conviértelo a segundos para asegurarte de que hicimos lo correcto, etc.

print(delta) assert(5*60*60+20*60+25 == delta.total_seconds())


Quería ingresar solo un tiempo y luego agregarlo a varias fechas, así que esto funcionó para mí:

from datetime import datetime as dtt time_only = dtt.strptime(''15:30'', "%H:%M") - dtt.strptime("00:00", "%H:%M")


Si usa Python 3, aquí está la versión actualizada de la solución de Hari Shankar, que utilicé:

from datetime import timedelta import re regex = re.compile(r''(?P<hours>/d+?)/'' r''(?P<minutes>/d+?)/'' r''(?P<seconds>/d+?)$'') def parse_time(time_str): parts = regex.match(time_str) if not parts: return parts = parts.groupdict() print(parts) time_params = {} for name, param in parts.items(): if param: time_params[name] = int(param) return timedelta(**time_params)


para el 4:13, y otros formatos estándar (pero si no sabes cuál) usa dateutil.parser.parse from python-dateutil

Para el primer formato (5hr34m56s), debe analizar usando expresiones regulares

Aquí hay una solución basada en re:

import re from datetime import timedelta regex = re.compile(r''((?P<hours>/d+?)hr)?((?P<minutes>/d+?)m)?((?P<seconds>/d+?)s)?'') def parse_time(time_str): parts = regex.match(time_str) if not parts: return parts = parts.groupdict() time_params = {} for (name, param) in parts.iteritems(): if param: time_params[name] = int(param) return timedelta(**time_params) >>> from parse_time import parse_time >>> parse_time(''12hr'') datetime.timedelta(0, 43200) >>> parse_time(''12hr5m10s'') datetime.timedelta(0, 43510) >>> parse_time(''12hr10s'') datetime.timedelta(0, 43210) >>> parse_time(''10s'') datetime.timedelta(0, 10) >>>