Des Alternatives à FastDateFormat pour être efficace, la date de l'analyse?
Bien conscient de la performance et du fil de problèmes avec SimpleDateFormat
, j'ai décidé d'aller avec FastDateFormat
, jusqu'à ce que j'ai réalisé que FastDateFormat
est pour la mise en forme uniquement, pas d'analyse!
Est-il une alternative à FastDateFormat
, qui est prêt à utiliser hors de la boîte et beaucoup plus rapide que SimpleDateFormat
?
Je crois FastDateFormat
est l'un des plus rapides, donc tout ce qui est à peu près aussi rapide à faire.
Juste curieux , aucune idée pourquoi FastDateFormat
ne prend pas en charge l'analyse? N'est-ce pas sérieusement limiter son utilisation?
- Note: lang 3.2, cette question & réponse sont maintenant obsolètes.
Vous devez vous connecter pour publier un commentaire.
À une meilleure estimation, c'est de garder FastDateFormat... eh bien... vite, en le limitant à l'affichage uniquement.
Apache Commons
DateUtils
a unparseDate
fonction, mais qui utiliseSimpleDateFormat
en interne.Une alternative est d'utiliser le JodaTime de la bibliothèque. C'est un remplacement complet pour traiter
DateFormat
,Date
, etCalendar
objets.JodaTime a un
DateTimeFormatter
qui peut être utilisé pour créerDateTime
objets (JodaTime l'équivalent de JavaDate
objets) à partir de chaînes.Un exemple de la façon de l'utiliser est comme ceci:
Je ne sais pas si c'est vraiment plus rapide que
SimpleDateFormat
, si.DateTimeFormatter
au lieu deJodaTime
. (Le nouveau Java 8 Temps de l'API a été conçu principalement par l'auteur deJodaTime
)Noter que depuis commons-lang 3.2, FastDateFormat prend en charge l'analyse ainsi que l'impression.
Voir: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/FastDateFormat.html
Trouvé quelque chose d'intéressant ici de cette affaire dans Android:
http://andmob.wikidot.com/faq-simpletimeformat
De Java 8, on peut utiliser DateTimeFormatter avec la l' Java 8 de l'API du Temps à la fois à analyser et mettre en forme des dates. À partir de la documentation:
Il est recommandé d'utiliser cette classe si possible pour de nouveaux travaux à l'avenir au lieu d'utiliser SimpleDateFormat.
Le "problème" avec SimpleDateFormat n'est pas la performance, son fil de sécurité.
Si vous avez des milliers de fils et de synchronisation n'est pas un problème d'utilisation synchronisée (vous pouvez également la piscine le cas pour l'alléger un peu)
Si vous avez une quantité raisonnable de threads de la méthode recommandée est d'avoir une instance distincte pour chaque SimpleDateFormat.
Mise à JOUR
De Java 8, il suffit d'utiliser
DateTimeFormatter
. Il est immuable, thread-safe, plus rapide et plus flexible. (Il offre également des fonctionnalités intéressantes comme la valeur par défaut de motifs pour ISO-8601 date/heure des chaînes de caractères.)Avez-vous vraiment besoin d'analyser les dates que rapidement? Avez-vous testé SimpleDateFormat et l'a trouvé trop lent pour vos besoins?
Remarque, il existe une variété de façons de cache lent à se construire, non thread-safe instances de classe (p. ex. ThreadLocal, piscines).