2017-06-16 4 views
-2

Djangos humanize Modul ist fantastisch zum Drehen datetime Objekte in etwas, das uns als Menschen mit seiner naturaltime Funktion mehr Sinn macht (docs). Was ich versuche, ist das Umgekehrte, indem ich eines der Formate naturaltime nehme und es wieder in ein datetime umwandele (was den offensichtlichen Genauigkeitsverlust akzeptiert).Umkehrung des Ergebnisses von Djangos natürlicher Zeit

Gibt es eine vorhandene Bibliothek, um dies zu tun, oder werde ich meine eigenen Muster schreiben müssen?

Ich weiß, das ist ein bisschen eine Frage "finde mich ein Werkzeug/Bibliothek", aber ich habe ziemlich viel gegooglet ohne Ergebnis.

Antwort

0

Für alle zukünftigen Suchenden schrieb ich dehumanize, um diese Frage zu behandeln. Es ist auf Github here.

from datetime import datetime, timedelta 
import re 


def naturaltime(text, now=None): 
    """Convert a django naturaltime string to a datetime object.""" 
    if not now: 
     now = datetime.now() 

    if text == 'now': 
     return now 
    if "ago" in text: 
     multiplier = -1 
    elif "from now" in text: 
     multiplier = 1 
    else: 
     raise ValueError("%s is not a valid naturaltime" % text) 

    text = text.replace('an ', '1 ') 
    text = text.replace('a ', '1 ') 

    days = get_first(r'(\d*) day', text) 
    hours = get_first(r'(\d*) hour', text) 
    minutes = get_first(r'(\d*) minute', text) 
    seconds = get_first(r'(\d*) second', text) 
    delta = timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds) 
    delta *= multiplier 
    return now + delta 


def get_first(pattern, text): 
    """Return either a matched number or 0.""" 
    matches = re.findall(pattern, text) 
    if matches: 
     return int(matches[0]) 
    else: 
     return 0 
Verwandte Themen