Frage

Diese Frage ist die Kehrseite der Frage: „Wie berechne ich die relative Zeit?".

Wie können Sie menschliche Eingaben über einen relativen Zeitraum hinweg analysieren?Standardmäßig würden Sie einen Versatz von vornehmen DateTime.Now(), könnte aber optional von einem anderen ausgeglichen werden DateTime.

(Bevorzugen Sie Antworten in C#)

Beispieleingabe:

  • "in 20 Minuten"
  • "5 Stunden zuvor"
  • „3h 2m“
  • "nächste Woche"

Bearbeiten: Nehmen wir an, wir können einige Grenzen für die Eingabe definieren.Es wäre nützlich, diese Art von Code im Internet zu haben.

War es hilfreich?

Lösung

Das ist der Aufbau eine DSL (Domain Specific Language) für Datum Handhabung. Ich weiß nicht, ob jemand einen für .NET getan hat, aber der Aufbau eines DSL ist recht einfach:

  1. Definieren Sie die Sprache genau, welche Eingabeformulare Sie akzeptieren und was werden Sie mit Zweideutigkeiten tun
  2. Erstellen Sie die Grammatik für die Sprache
  3. Erstellen Sie die Finite-State-Maschine, die Ihre Sprache in eine umsetzbare AST parst

Sie können sich alles, was zu tun (mit Hilfe von the Dragon Buch , zum Beispiel) oder mit Hilfe von Werkzeugen auf die Wirkung, wie in dieser gezeigt

Andere Tipps

Eine Google-Suche auftaucht die ParseDateTime Bibliothek (im Zusammenhang mit der Chandler Projekt ), die genau dies zu tun konzipiert. Es ist Open Source (Apache License) und in Python geschrieben. Es scheint ziemlich anspruchsvoll zu sein - von der Homepage:

  

ParseDateTime ist in der Lage zu analysieren, für   beispielsweise die folgenden:

* Aug 25 5pm
* 5pm August 25
* next saturday
...
* tomorrow
* next thursday at 4pm
* at 4pm
* eod
* in 5 minutes
* 5 minutes from now
* 5 hours before now
* 2 days from tomorrow

Da es in reinem Python implementiert ist und verwendet nicht etwas Besonderes, es gibt eine gute Chance, es kompatibel ist mit Ironpython , so dass Sie es mit .net nutzen könnten. Wenn Sie speziell eine C # Lösung möchten, können Sie etwas auf der Grundlage der Algorithmen schreiben könnte sie verwenden ...

Es kommt auch mit einem ganzen Bündel von Unit-Tests.

Dies ist wahrscheinlich nicht so hilfreich, da Sie c # reden, aber da niemand ist es erwähnt noch können Sie versuchen, einen Blick auf PHP ausgezeichnet und völlig verrückt heimisch zu nehmen strtotime Funktion

Die rubin Leute versucht haben, diese aufgerufen, mit einem Parser zu bekämpfen Chronic .

Ich sah eine informative Video-Präsentation vor kurzem auf, wie der Autor ging um dieses Problem zu lösen.

Das http://www.codeproject.com/KB/edit/dateparser aspx Ist ziemlich nah an, was Sie versuchen zu erreichen. Nicht die eleganteste Lösung, aber sicher könnten Sie etwas Arbeit sparen.

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