2010-11-18 19 views
8

Czy istnieje jakaś inteligentna biblioteka analizatora dat/czasu dla Javy? Przez inteligentne rozumiem, że nie muszę określać formatu daty/czasu. API powinien być podobny do tego:Inteligentny parser daty/czasu dla Javy

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

nie. (15chrs ...) – Bozho

+0

Podobne pytanie: http://stackoverflow.com/questions/3850784/recognise-an-arbitrary-date-string – Joel

+0

możliwy duplikat [Przetwarzaj dowolną datę w Javie] (http: // stackoverflow. com/questions/3389348/parse-any-date-in-java) – nawfal

Odpowiedz

12

JodaTime jest doskonała do manipulowania date obiektów (np date.plusDays (10))

... ale JChronic to co chcesz dla języka naturalnego, na przykład data parsowania

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

Twoje pytanie jest podobne do this.

+2

"Przetwarzanie daty w języku naturalnym"! = "Analiza formatu zgadywania daty" –

+0

Nie - ale nadal jest przydatna w kontekście pytania. – Joel

+0

Dokładnie tego szukam, dziękuję. – fhucho

3

Nie, nie ma. Co powinien powrócić na "01/03/03"? 1 stycznia 2003 r., 3 lutego 2001 r. Lub 2 marca 2001 r.?

+0

Zobacz moją aktualizację pytania. – fhucho

+0

@fhucho '10/10/10' jest 2010 10 października, bez uwzględnienia locale, jeśli jest traktowane jako dzień/miesiąc/rok w dowolnej kombinacji. Co powinien zrobić parser dla '08/09'? Jest 8 września/bieżący rok dla en-us lub Sep/2008 lub Aug/2009 lub powoduje błąd parsowania? – khachik

+0

@khachik oh, masz rację, będę edytować pytanie na 01.02.03. Jeśli chodzi o 08/09 - powinien zwrócić jedną z 3 opcji i jakoś wskazać, że nie ma pewności co do wyniku. Idealnie powinien zachowywać się podobnie do człowieka ... – fhucho

1

To naprawdę nie będzie możliwe lub przynajmniej wystarczająco wiarygodne.

Na przykład, jaka jest data łańcucha 10/10/10?

+1

Nie potrzebuję 100% niezawodności. W takich przypadkach funkcja parsowania może mieć locale lub język jako opcjonalny argument. – fhucho

2

Ciekawy który chcesz zadzwonić, że inteligentny, tuż pod uwagę te:

  • Czy Twój 1.2.2010 taki sam jak mój?
  • Co stanie się, jeśli kod zostanie uruchomiony w różnych strefach czasowych z różnymi lokalizacjami?
  • Czy powinien on być zgodny z niektórymi standardami well established, czy może wymyślić całkowicie własny?

Odpowiedź na pytanie to nr.