374 votes

Vs Java Date calendrier

Pourrait quelqu'un s’il vous plaît aviser le courant « pratique exemplaire » autour des types Date et calendrier.

Lorsque vous écrivez du nouveau code, il est préférable de toujours favoriser les calendrier sur la Date, ou y a-t-il des cas où la Date est le type de données le plus approprié ?

383voto

cletus Points 276888

La Date est plus simple de classe et est essentiellement pour des raisons de compatibilité descendante. Si vous avez besoin de fixer des dates particulières ou de faire des opérations arithmétiques, utiliser un Calendrier. Calendriers occupons également de la localisation. La précédente date de fonctions de manipulation de Date ont depuis été abandonnée.

Personnellement, j'ai tendance à utiliser de temps en millisecondes comme un long (ou, selon le cas) ou Calendrier de quand il est un choix.

Fois la Date et le Calendrier sont mutables, qui a tendance à présenter des problèmes lors de l'utilisation dans une API.

67voto

dmeister Points 11529

La meilleure façon pour le nouveau code (si votre politique permet au code de tierce partie) consiste à utiliser la bibliothèque Joda.

Les deux, Date et calendrier, ont tant de problèmes de conception qui ne sont ni bonnes solutions pour le nouveau code.

58voto

oxbow_lakes Points 70013
  • Date et Calendar sont vraiment le même concept fondamental (les deux représentent un instantané dans le temps et sont des wrappers autour d'une sous - long de la valeur).

  • On pourrait avancer que, Calendar est en fait encore plus cassé qu' Date est, comme il semble offrir de faits concrets sur des choses comme le jour de la semaine et l'heure de la journée, alors que si vous modifiez ses timeZone de la propriété, le béton se transforme en blancmange! Ni les objets sont vraiment utiles comme un magasin d' année-mois-jour ou de l'heure de la journée pour cette raison.

  • Utiliser Calendar seulement comme une calculatrice qui, lorsqu'ils sont administrés Date et TimeZone des objets, faire les calculs pour vous. Éviter son utilisation pour la propriété de la saisie dans une application.

  • Utiliser SimpleDateFormat avec TimeZone et Date pour générer l'affichage des Chaînes de caractères.

  • Si vous vous sentez aventureux utilisation Joda-Temps, même si elle est inutilement compliqué à mon humble avis, et sera bientôt remplacée par la JSR 310 date de l'API dans tous les cas.

  • J'ai répondu avant qu'il n'est pas difficile de rouler votre propre YearMonthDay classe, qui utilise Calendar sous le capot pour les calculs de date. J'ai été downvoted pour la suggestion, mais je persiste à croire qu'il est valide parce que Joda-Time (et JSR 310) sont vraiment si compliqué pour la plupart des cas d'utilisation.

25voto

KLE Points 11711

La Date est le meilleur pour le stockage d'un objet date. C'est le persisté, la Sérialisé ...

Le calendrier est le meilleur pour la manipulation de Dates.

Remarque: nous avons également parfois faveur de java.lang.De longue Date, parce que la Date est mutable et donc pas thread-safe. Sur un objet Date, l'utilisation setTime() et getTime() pour basculer entre les deux. Par exemple, une constante de la Date de la demande (exemples: le zéro 1970/01/01, ou un applicatif END_OF_TIME que vous définissez pour 2099/12/31 ; ceux-ci sont très utiles pour remplacer les valeurs null comme heure de début et de fin de temps, surtout si vous persistez dans la base de données, SQL est si particulière avec les valeurs null).

15voto

Andrzej Doyle Points 52541

Dates doit être utilisée comme immuable points dans le temps; Calendars sont mutables, et peut être passé autour et de les modifier si vous avez besoin de collaborer avec d'autres classes à venir avec une date finale. Considérer analogue String et StringBuilder et vous l'aurez compris, la façon dont je considère qu'ils devraient être utilisés.

(Et oui, je sais la Date n'est pas techniquement immuable, mais l'intention est qu'il ne doit pas être mutables, et si rien d'appels aux méthodes obsolètes alors il en est ainsi.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X