2010-11-18 18 views
8

¿Existe alguna biblioteca analizadora inteligente de fecha/hora para Java? Por inteligente quiero decir, que no necesito especificar el formato de fecha/hora. La API debe ser similar a esto:Analizador de fecha/hora inteligente para 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 

ACTUALIZACIÓN:

// 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

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

+0

posible duplicado de [Analizar cualquier fecha en Java] (http: // stackoverflow. com/questions/3389348/parse-any-date-in-java) – nawfal

Respuesta

12

JodaTime es excelente para la manipulación de los objetos de fecha (por ejemplo date.plusDays (10))

... pero JChronic es lo que quiere para el lenguaje natural fecha de análisis, por ejemplo,

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

Tu pregunta es similar a this uno.

+2

"Analizador de fecha de lenguaje natural"! = "Análisis de fecha de formateo de adivinanzas" –

+0

No, pero sigue siendo útil en el contexto de la pregunta. – Joel

+0

Eso es exactamente lo que estoy buscando, gracias. – fhucho

3

No, no lo hay. ¿Qué debería devolver el "01/02/03"? 1 de enero de 2003, 3 de febrero de 2001 o 2 de marzo de 2001?

+0

Ver la actualización de mi pregunta. – fhucho

+0

@fhucho '10/10/10' es 2010 10 de octubre sin considerar la configuración regional si se trata como día/mes/año en cualquier combinación. ¿Qué debe hacer el analizador para '08/09'? ¿Es 8/Sep/año actual para en-us, o septiembre/2008 o agosto/2009 o causa un error de análisis? – khachik

+0

@khachik oh, tienes razón, voy a editar la pregunta a 01/02/03. En cuanto a 08/09, debería devolver una de las 3 opciones y de alguna manera indicar que no está seguro del resultado. Idealmente, debería comportarse de manera similar a un humano ... – fhucho

1

Esto realmente no va a ser posible, o al menos lo suficientemente confiable.

Por ejemplo, ¿qué fecha representa la cadena 10/10/10?

+1

No necesito el 100% de confiabilidad. Para casos como este, la función de análisis puede tener la configuración regional o el idioma como un argumento opcional. – fhucho

2

curioso que desea llamar a ese inteligente, simplemente consideran los siguientes:

  • Está su 1.2.2010 la misma que la mía?
  • ¿Qué sucede si el código se ejecuta en diferentes zonas horarias con diferentes configuraciones regionales?
  • ¿Debería seguir algún estándar well established o inventar el suyo por completo?

La respuesta a tu pregunta es no.