2010-11-18 16 views
8

Esiste una libreria di parser data/ora intelligente per Java? Con intelligente intendo, che non ho bisogno di specificare il formato di data/ora. L'API dovrebbe essere simile a questo:Analizzatore intelligente di data/ora per 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

no. (15chrs ...) – Bozho

+0

Domanda simile a: http://stackoverflow.com/questions/3850784/recognise-an-arbitrary-date-string – Joel

+0

possibile duplicato di [Analizza qualsiasi data in Java] (http: // stackoverflow. it/questions/3389348/parse-any-date-in-java) – nawfal

risposta

12

JodaTime è eccellente per la manipolazione di oggetti di data (ad esempio date.plusDays (10))

... ma JChronic è ciò che si desidera per la data del linguaggio naturale l'analisi, ad esempio,

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

La tua domanda è simile a this uno.

+2

"Analisi della data in linguaggio naturale"! = "Formato-indovinando l'analisi della data" –

+0

No, ma è comunque utile nel contesto della domanda. – Joel

+0

Questo è esattamente quello che sto cercando, grazie. – fhucho

3

No, non c'è. Cosa dovrebbe restituire "01/02/03"? 1 gennaio 2003, 3 febbraio 2001 o 2 marzo 2001?

+0

Vedere l'aggiornamento della mia domanda. – fhucho

+0

@fhucho '10/10/10' è il 10 ottobre 2010 senza considerare il locale se considerato come giorno/mese/anno in qualsiasi combinazione. Cosa dovrebbe fare il parser per "08/09"? È l'8/Sep/anno corrente per en-us, o settembre 2008 o agosto 2009 o provoca un errore di analisi? – khachik

+0

@khachik oh, hai ragione, modifico la domanda al 01/02/03. Per quanto riguarda l'08/09, dovrebbe restituire una delle 3 opzioni e in qualche modo indicare che non è sicuro del risultato. Idealmente dovrebbe comportarsi allo stesso modo di un essere umano ... – fhucho

1

Questo non è davvero possibile, o almeno abbastanza affidabile.

Ad esempio, quale data rappresenta la stringa 10/10/10?

+1

Non ho bisogno di affidabilità al 100%. Per casi come questo, la funzione di analisi può avere locale o lingua come argomento facoltativo. – fhucho

2

Curioso che si desidera chiamare che intelligente, basta considerare questi:

  • È il vostro 1.2.2010 uguale al mio?
  • Cosa succede se il codice viene eseguito in fusi orari diversi con locali diversi?
  • Dovrebbe seguire alcuni standard well established o inventare il proprio tutto?

La risposta alla tua domanda è no.

Problemi correlati