2010-11-18 11 views
8

Gibt es eine intelligente Datum/Uhrzeit-Parser-Bibliothek für Java? Mit intelligent meine ich, dass ich das Datum/Uhrzeit-Format nicht angeben muss.Intelligenter Datum/Zeit-Parser für Java

Calendar cal = DateTimeParser.parse("01/06/10 14:55"); 
cal = DateTimeParser.parse("1 Jan 2009"); // assumes 00:00 time 
cal = DateTimeParser.parse("1.2.2010"); 
cal = DateTimeParser.parse("kygyutrtf"); // throws exception 

UPDATE:

// I'm telling the parser: "If unsure, assume US date format" 
cal = DateTimeParser.parse("01/02/03", new Locale("en-us")); 
+3

nein. (15chrs ...) – Bozho

+0

Ähnliche Fragen zu: http://stackoverflow.com/questions/3850784/recognise-an-arbitrary-date-string – Joel

+0

mögliche Duplikate von [Jedes Datum in Java parsen] (http: // stackoverflow. com/questions/3389348/parse-any-date-in-java) – nawfal

Antwort

12

JodaTime eignet sich hervorragend für Datum Manipulieren von Objekten (z date.plusDays (10))

... aber JChronic ist, was Sie für natürliche Sprache Datum Parsing wollen, zum Beispiel

Chronic.parse("now") 
Chronic.parse("tomorrow 15:00") 
Chronic.parse("14/2/2001") 
Chronic.parse("yesterday") 
Chronic.parse("20 Jan 2010") 

Ihre Frage ist ähnlich wie this eins.

+2

"Parsen der Partitur der natürlichen Sprache"! = "Parsing der Partitur des Format-Erratens" –

+0

Nein - aber es ist immer noch nützlich im Zusammenhang mit der Frage. – Joel

+0

Genau das suche ich, danke. – fhucho

3

Nein, es ist nicht die API sollte ähnlich sein. Was sollte es am "02/02/03" zurückgeben? 1. Januar 2003, 3. Februar 2001 oder 2. März 2001?

+0

Siehe meine Frage zu aktualisieren. – fhucho

+0

@fhucho '10/10/10' ist 10.10.2010 ohne Rücksicht auf das Gebietsschema, wenn es als Tag/Monat/Jahr in irgendeiner Kombination behandelt wird. Was sollte der Parser für '08/09' tun? Es ist 8/September/aktuelles Jahr für en-us oder Sep/2008 oder Aug/2009 oder es verursacht Parsing-Fehler? – khachik

+0

@khachik oh, du hast recht, ich werde die Frage bis zum 01/02/03 bearbeiten. Wie für 08/09 - sollte es eine der 3 Optionen zurückgeben und irgendwie anzeigen, dass es über das Ergebnis unsicher ist. Idealerweise sollte es sich ähnlich wie ein Mensch verhalten ... – fhucho

1

Dies wird nicht wirklich möglich sein, oder zumindest zuverlässig genug.

Zum Beispiel, welches Datum repräsentiert die Zeichenfolge 10/10/10?

+1

Ich brauche keine 100% ige Zuverlässigkeit. In Fällen wie diesem kann die Syntaxanalyse ein Gebietsschema oder eine Sprache als optionales Argument haben. – fhucho

2

Neugierig, dass Sie das intelligente nennen wollen, nur diese betrachten:

  • Ist Ihr 1.2.2010 das gleiche wie meine?
  • Was passiert, wenn der Code in verschiedenen Zeitzonen mit unterschiedlichen Gebietsschemas ausgeführt wird?
  • Sollte es einige well established Standard folgen oder erfinden Sie völlig selbst?

Die Antwort auf Ihre Frage ist keine.