2010-11-18 7 views
8

Existe-t-il une bibliothèque d'analyseurs de date/heure intelligents pour Java? Par intelligent je veux dire, que je n'ai pas besoin de spécifier le format date/heure. L'API devrait ressembler à ceci:Analyseur de date/heure intelligent pour 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 

MISE À JOUR:

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

Question similaire à: http://stackoverflow.com/questions/3850784/recognise-an-arbitrary-date-string – Joel

+0

duplication possible de [Parse n'importe quelle date en Java] (http: // stackoverflow. com/questions/3389348/parse-any-date-in-java) – nawfal

Répondre

12

JodaTime est excellent pour manipuler des objets de date (par exemple date.plusDays (10))

... mais JChronic est ce que vous voulez pour l'analyse syntaxique de la date du langage naturel, par exemple

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

Votre question est similaire à this one.

+2

"Analyse de la date en langage naturel"! = "Analyse de la date de formatage" –

+0

Non - mais c'est toujours utile dans le contexte de la question. – Joel

+0

C'est exactement ce que je cherche, merci. – fhucho

3

Non, il n'y a pas. Qu'est-ce qu'il devrait retourner le "01/02/03"? 1er janvier 2003, 3 février 2001 ou 2 mars 2001?

+0

Voir ma mise à jour de la question. – fhucho

+0

@fhucho '10/10/10' est 2010 Oct 10 sans tenir compte de la locale si elle a traité comme jour/mois/année dans n'importe quelle combinaison. Qu'est-ce que l'analyseur devrait faire pour '08/09'? C'est 8/Sep/année courante pour en-us, ou Sep/2008 ou Aug/2009 ou cela provoque une erreur d'analyse? – khachik

+0

@khachik oh, vous avez raison, je vais modifier la question au 01/02/03. Comme pour 08/09 - il devrait retourner l'une des 3 options et indiquer d'une manière ou d'une autre qu'il n'est pas sûr du résultat. Idéalement, il devrait se comporter comme un humain ... – fhucho

1

Cela ne va pas vraiment être possible, ou du moins assez fiable.

Par exemple, à quelle date correspond la chaîne 10/10/10?

+1

Je n'ai pas besoin de 100% de fiabilité. Pour les cas comme celui-ci, la fonction d'analyse peut avoir des paramètres régionaux ou une langue comme argument optionnel. – fhucho

2

curieux que vous voulez appeler intelligent, il suffit de considérer ces:

  • Est-ce votre 1.2.2010 la même chose que moi? Que se passe-t-il si le code est exécuté sur des fuseaux horaires différents avec des paramètres régionaux différents?
  • Devrait-il suivre certaines normes well established ou inventer entièrement le sien?

La réponse à votre question est non.