Automatique de la Date/Heure de l'analyseur sans spécification de format
Je suis à la recherche d'une librairie java qui peut analyser une chaîne de caractères dans un POJO sans spécifier le format. J'ai fait des recherches POjava. Est-il autre bibliothèque qui n'chose de similaire?
DateTime dateTime = DateTimeParser.parse("21/02/13");
//If unclear use the cultural information passed
DateTime dateTime = DateTimeParser.parse("01/02/13", new Locale("en-us"));
//Should also work with time zones
DateTime dateTime = DateTimeParser.parse("2011/12/13T14:15:16+01:00");
J'ai trouvé les liens suivants avec le même problème Intelligent date /heure de l'analyseur pour Java, mais pas très utile réponses. Ni Joda ou JChronic fait ce que je voulais. Corrigez-moi si je me trompe.
Mise à jour:
La raison pour laquelle je dis Joda ne résout pas mon but est, Joda attend de la chaîne à être analysée en format ISO8601 ou tout autre format que vous spécifiez comme "aaaammjj". Je ne vais pas être en mesure de coder en dur ce format que j'ai besoin de gérer plusieurs formats.
J'ai un hack autour de la solution pour éliminer l'ambiguïté Américaine ou Européenne, les formats de date, c'est à dire mm/jj/aa ou jj/mm/aa. En supposant que j'ai accès au fuseau horaire de la date, puis-je savoir si il est Américain ou Européen format? Quelqu'un peut me dire façon de le faire? Cherché sur google mais rien trouvé.
06/05/2013
? Quoi que vous choisissez, vous serez mal pour un montant considérable de la planète.Avez-vous cherché à Joda Time?
Si il y a une ambiguïté avec la première ligne, utilisez la valeur par défaut de l'information culturelle, à moins d'indication à l'un comme dans la deuxième ligne de code
stackoverflow.com/a/4216288/300257
double possible de à l'Aide de Joda Date & de l'API du Temps pour analyser de multiples formats
OriginalL'auteur saravanan07 | 2013-02-21
Vous devez vous connecter pour publier un commentaire.
Le problème est qu'il y a quelques formats que ne peut pas être deviné.
Un exemple simple est
01/02/2013
. Est-ce février 1er ou le 2 janvier? Ou même pire:01/02/09
?Les deux il existe des formats. (Merci, au royaume-UNI et les etats-unis!)
Donc n'importe quel format devineur devra compter sur la chance pour ces formats, ou de ne pas délibérément pour ces.
Le module python
dateutil.parser
peut servir comme un exemple de "best effort" de l'analyseur. Désolé que je ne connais pas java équivalent. Mais vous voudrez peut-être regarder à Joda Timehttp://labix.org/python-dateutil#head-b95ce2094d189a89f80f5ae52a05b4ab7b41af47
il a effectivement paramètres
dayfirst
etyearfirst
.Puis il y a un module perl:
https://metacpan.org/pod/Time::ParseDate
Vous pourriez être en mesure d'utiliser la liste de priorité de ce module. Ce n'est pas très rapide à l'aveuglette essayer un certain nombre de motifs (une optimisation du lexer sera plus rapide), mais il peut être assez bon pour vous, sauf si vous êtes deviner le format de millions d'enregistrements.
OriginalL'auteur Anony-Mousse
J'ai trouvé la réponse à mon problème. J'ai utilisé cette bibliothèque POjava. Cette page explique comment vous pouvez mettre en forme la date+heure de chaîne sans spécifier n'importe quel format. Cependant, pour la bibliothèque de fonctionner correctement, vous devez spécifier la date de la commande comme le Jour, suivie par Mois ou par Mois, suivie par Jour.
OriginalL'auteur saravanan07
Il n'y a pas de solution magique. Rappelez-vous formats de date/heure peut également dépendre de vos paramètres régionaux.
De façon réaliste le meilleur que vous pouvez faire est de définir une liste de formats, et "essayer" un par un jusqu'à ce que vous trouver un (ou aucun) qui correspondent.
N'oubliez pas de penser à la sécurité des threads lorsque l'on travaille avec date/heure d'objets en java. J'ai une classe de faire ce genre de choses nommé "ThreadSafeDateTimeFormatter".
Bonne chance!
OriginalL'auteur vikingsteve
Puisque je n'ai pas trouver de solution pratique pour ma situation, j'ai écrit un simple statique méthode utilitaire qui m'ont aidé. Emballage formats dans la collecte et l'itération sur il pourrait rendre les choses plus faciles si beaucoup plus de formats sont ajoutés.
où
IDateFConstants
ressembleOriginalL'auteur Miki
Vous avez besoin au moins d'avoir une liste ordonnée de modèle de candidats. Une fois que vous avez cela, Apache DateUtils a un
parseDate(String dateString, String[] patterns)
méthode qui vous permet de tester facilement une liste de modèles sur votre chaîne de date, et l'analyse par la première qui correspond à:OriginalL'auteur Sanchay