Frage

Ich möchte eine Möglichkeit, natürliche Zeiten für veraltete Gegenstände in Python zu zeigen. Ähnlich wie Twitter wird eine Nachricht von "vor einem Moment", "vor ein paar Minuten", "vor zwei Stunden", "vor drei Tagen" usw. zeigen.

Django 1.0 hat eine "humanize" Methode in Django.Contrib. Ich benutze das Django -Framework nicht, und selbst wenn ich es wäre, ist es begrenzter als ich es möchte.

Bitte lassen Sie mich (und Generationen zukünftiger Sucher) wissen, ob es bereits eine gute Arbeitslösung gibt. Da dies eine übliche Aufgabe ist, kann ich mir vorstellen, dass es etwas geben muss.

War es hilfreich?

Lösung

Obwohl es für Sie in diesem Moment nicht nützlich ist, kann dies für zukünftige Suchende der Sucher sein: Das Babel -Modul, das sich mit allen möglichen Gebietsschemas befasst, hat eine Funktion, um mehr oder weniger das zu tun, was Sie wollen. Derzeit ist es jedoch nur im Kofferraum, nicht in der neuesten Veröffentlichung (Version 0.9.4). Sobald die Funktionalität in einer Veröffentlichung landet, könnten Sie so etwas wie:

from datetime import timedelta
from babel.dates import format_timedelta
delta = timedelta(days=6)
format_timedelta(delta, locale='en_US')
u'1 week'

Dies wird direkt von genommen Die Babel -Dokumentation rechtzeitig Delta -Formatierung. Dies bringt Ihnen zumindest Teile des Weges. Es wird keine Unschärfe bis auf das Niveau der "Momente" und dergleichen tun, aber es wird "n Minuten" usw. richtig pluralisiert.

Für das, was es wert ist, enthält das Babel -Modul auch Funktionen für die Formatierung von Daten und Zeiten gemäß Gebietsschema, was möglicherweise nützlich sein kann, wenn die Zeit Delta groß ist.

Andere Tipps

Twitter -Daten in spezifisch sind interessant, weil sie nur für den ersten Tag relativ sind. Nach 24 Stunden zeigen sie nur Monat und Tag. Nach einem Jahr zeigen sie die letzten zwei Ziffern des Jahres. Hier ist eine Beispielfunktion, die etwas mehr mit Twitter -Relativdaten ähnelt, obwohl es das Jahr nach 24 Stunden immer auch zeigt. Es sind nur US -Gebietsschema, aber Sie können es immer nach Bedarf ändern.

# tested in Python 2.7
import datetime
def prettydate(d):
    diff = datetime.datetime.utcnow() - d
    s = diff.seconds
    if diff.days > 7 or diff.days < 0:
        return d.strftime('%d %b %y')
    elif diff.days == 1:
        return '1 day ago'
    elif diff.days > 1:
        return '{} days ago'.format(diff.days)
    elif s <= 1:
        return 'just now'
    elif s < 60:
        return '{} seconds ago'.format(s)
    elif s < 120:
        return '1 minute ago'
    elif s < 3600:
        return '{} minutes ago'.format(s/60)
    elif s < 7200:
        return '1 hour ago'
    else:
        return '{} hours ago'.format(s/3600)

Es gibt das humanize Paket:

>>> import humanize
>>> import datetime
>>> humanize.naturalday(datetime.datetime.now())
'today'
>>> humanize.naturalday(datetime.datetime.now() - datetime.timedelta(days=1))
'yesterday'
>>> humanize.naturalday(datetime.date(2007, 6, 5))
'Jun 05'
>>> humanize.naturaldate(datetime.date(2007, 6, 5))
'Jun 05 2007'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=1))
'a second ago'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=3600))
'an hour ago'

Beispiele für Ihren Anwendungsfall:

>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=36000))
'10 hours ago'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=360000))
'4 days ago'
>>> humanize.naturaltime(datetime.datetime.now() - datetime.timedelta(seconds=3600000))
'a month ago'

Weiter (siehe Link oben), unterstützt es auch die Humanisierung von:

  • Ganzzahlen
  • Dateigrößen
  • schwimmt (zu Bruchzahlen)

Oder Sie können sich leicht anpassen Timesce.Py Von Django, der nur zwei andere Abhängigkeiten für sich selbst hat: eine für die Übersetzung (die Sie möglicherweise nicht benötigen) und eine für Timezones (die leicht angepasst werden können).

Übrigens, Django hat eine BSD -Lizenz Das ist ziemlich flexibel, Sie können es in jedem Projekt verwenden, das Sie derzeit verwenden.

Suchen Sie etwas wie das (Drucken relativer Daten in Python)?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top