Dois-je utiliser java.util.Date ou de passer à java.temps.LocalDate
Edit: bon, apparemment, c'était aussi l'opinion de la base, donc je vais essayer de reformuler plus précisément -
Y sont clairement mises en garde ou des inconvénients de l'utilisation de LocalDate, LocalTime etc. dans un code Java qui ne nécessite pas de rétro-compatibilité, et si oui - quels sont-ils?
Je suis à la recherche pour des choses comme "Actuel EE bibliothèques de X et Y ne fonctionnent pas correctement avec LocalDate" ou "très utile, le modèle est cassé avec LocalTime" et cetera.
(ici est la question de départ pour référence)
Avec Java 8, un nouveau moment de l'API est introduite, à savoir la java.temps.LocalDate etc., mais java.util.La Date n'est pas marqué comme obsolète.
Je suis en train d'écrire un nouveau projet, qui n'a pas besoin d'être rétro-compatible. Dois-je utiliser uniquement LocalDate, LocalDateTime etc.? Existe-il des inconvénients à l'utilisation de cette nouvelle API, par opposition à la bonne vieille java.util.Date?
En particulier - je vais travailler principalement avec JDBC. De ce que j'ai vu JDBC poignées de java.util.Date de bien. Il est aussi bien adapté pour LocalDate?
La recherche a abouti à beaucoup de sites expliquant comment convertir d'un format à l'autre, mais pas de réponse définitive à de nouveaux codes de l'ancienne API.
Grâce.
good old java.util.Date
- il est vieux, mais pas bon. le nouveau code doit utiliser la nouvelle API.- Il y a une raison, une toute nouvelle date de l'API a été créé. Si vous avez un nouveau projet, rendez-vous avec le Java 8 introduit de l'API.
- S'il vous plaît, utiliser la nouvelle API. 😛
- Je vous remercie. Est-il une raison particulière de java.util.La Date n'est pas marquée comme @Deprecated dans une version plus récente de Java si c'est pour être remplacé par java.les classes de temps?
- Java est réticent à l'idée de l'utilisation de l' @Deprecated annotation pour les choses qui sont mauvais, mais il ne va pas être supprimé.
- Oracle propre documentation en donne trois raisons principales pour rendre caduque une API: "C'est de l'insécurité, buggy, ou très inefficace; Il s'en va dans une version future; Il encourage les mauvaises pratiques de codage." Si ces exigences s'appliquent à java.util.La Date peut être une question d'opinion.
- Posez-vous cette question, la nouvelle api de vous fournir toutes les fonctionnalités dont vous avez besoin? Je ne suis pas sûr si JDBC a été mise à jour pour gérer la nouvelle api et repose toujours sur l'île de java.sql.Date. La conversion à partir de la Date de LocalDateTime os pas difficile non plus, de sorte que vous pouvez être amené à fournir certaines combler de toute façon...c'est ce que vous avez besoin de peser, vaut-il le temps et les efforts nécessaires pour convertir à partir de la Date de LocalDateTime si tout ce que vous allez faire est, par exemple, le format de la valeur de sortie? Si vous êtes en train de faire des calculs de date, alors oui, sans doute, optez pour la nouvelle API
- Ok, donc apparemment MySQL connector J ne prend pas en charge Java 8 (allez comprendre!), il est donc impossible d'utiliser LocalDate / LocalTime etc. avec MySQL. Comme mon projet utilise MySQL - il semble que je vais coller avec de la mauvaise vieille Date.
- Aucun inconvénients à l'utilisation de java.l'API du temps, car il est pris en charge par le pilote JDBC MySQL maintenant..?
- En un mot: de Sun Microsystems, Oracle, et la PLAN communauté tous les donna sur le terrible héritage de la date-heure de cours avec l'adoption de la JSR 310. Et vous devriez en faire autant. Maintenant, des années plus tard, de nombreuses bibliothèques ont été mis à jour à l'appui de java.les classes de temps. Si certains de la bibliothèque de manque de soutien, remplir un rapport de bogue.
Vous devez vous connecter pour publier un commentaire.
Malgré le nom, java.util.La Date peut être utilisé pour stocker à la fois la date et l'heure (il stocke UTC décalage de quelques millisecondes depuis l'époque)
Je n'hésiterais pas à utiliser la nouvelle API raison de plus de fonctionnalités:
Aucun des ci-dessus sont disponibles sur java.util.Date
Ancienne Date peut également être converti en LocalDateTime comme ceci:
Je suis en ajoutant à la Réponse correcte par Ole V. V.
JDBC 4.2
JDBC 4.2 ajout du support pour l'échange de java.temps objets avec la base de données. Voir la
PreparedStatement::setObject
etResultSet::getObject
méthodes.De récupération.
Pour des raisons qui m'échappent, JDBC spec ne pas besoin de support pour les deux plus couramment utilisé des classes:
Instantané
etZonedDateTime
. Votre base de données et Pilote JDBC peut ou ne peut pas supporter ces.Si non, vous pouvez facilement convertir. Commencez avec
OffsetDateTime
, avec le soutien nécessaire dans JDBC.Pour voir ce moment à travers le mur-le temps de l'horloge utilisé par les habitants d'une région en particulier (un temps) de la zone, appliquer un
ZoneId
pour obtenir unZonedDateTime
objet.À ajuster en UTC, extrait d'un
Instant
. UnInstant
est toujours en UTC, par définition.Vous pouvez convertir en sens inverse, écrire dans une base de données.
...et:
Avis de la convention de nommage utilisée dans java.temps:
at
,from
,to
,with
, et ainsi de suite.Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Java 8 et plus tard: pas de soucis
Non, il n'ya aucune raison pourquoi vous ne voulez pas utiliser java.le temps, le moderne Java date et l'heure de l'API si vous êtes sur Java 8 ou plus tard (où il est intégré).
La seule chose que l'on peut brièvement prendre en compte, est celui que vous avez déjà exclus.
Et même pour la rétro-compatibilité, vous pouvez utiliser en toute sécurité de java.fois depuis les méthodes de conversion sont intégrés dans les anciennes classes de Java 8.
Java 6 et 7: peser
Si vous êtes sur Java 6 ou 7, vous aurez besoin d'utiliser la ThreeTen-Backport pour java.temps, plus adapté pour Android ci-dessous API de niveau 26 dans ThreeTenABP. Si vous êtes à la ne faire que très peu de très simple date et le temps de travail et de compatibilité ascendante, en quelque sorte, n'est pas un problème, vous pouvez vous demander si la dépendance externe en vaut la peine. Veuillez prendre en compte que votre dépendance externe est mais un rétroportage de ce qui est intégré dans Java 8 et, plus tard, de sorte que le roc, et, par conséquent, en outre, que vous aurez seulement besoin d'elle jusqu'à ce que vous migrer vers Java 8 ou plus tard. À quel moment vous pouvez modifier vos importations, les vérifications et de faire disparaître le backport.
Vos exemples de concevoir des passifs
Il y a quelques exemples de ce que, aussi la bibliothèque de classes du JDK. Mon choix serait d'utiliser java.le temps dans mon propre code et de convertir juste avant l'appel à l'API qui n'a pas encore accepter un java.type de temps. Et inversement, si je reçois une instance d'une ancienne classe de l'API, de le convertir première chose et l'utilisation de java.le temps pour le reste.
Je ne connais pas de tel modèle. Au contraire de java.utilise des modèles des objets immuables et usine méthode, contrairement à la plupart des anciennes classes.