Meilleure façon d'obtenir le maximum de valeur de Date en java?
J'écris un peu de logique qu'il faut traiter les dates nulles en ce sens à jamais dans l'avenir (la date en question est une date d'expiration, ce qui peut ou peut ne pas exister). Au lieu de les mettre dans des cas particuliers pour une date nulle dans tout le code, je veux juste convertir une valeur null dans le maximum possible. Je ne vois pas de façon évidente à obtenir une telle valeur, sans codage en dur elle. Quelle est la meilleure façon d'obtenir la valeur maximale, quelle que soit la Date de la mise en œuvre est en cours d'utilisation?
- Pour Joda-Time, voir cette Question similaire.
- Il n'y a pas de bonne réponse à cette parce que (a) les valeurs maximales et (b) la granularité de la date-heure de valeurs varient entre les langages de programmation, les bibliothèques, bases de données, et ainsi de suite. Je suggère de manière arbitraire le choix d'une valeur codée en dur assez loin pour être sûr qu'il survit à votre application, mais pas si loin que d'aller au-delà des limites de chaque composant. Quelque chose comme
2666-01-01T00:00:00.0Z
.
Vous devez vous connecter pour publier un commentaire.
Essayer
qui devrait vous donner la plus grande valeur de date en Java.
Date.MAX_VALUE
Encapsuler les fonctionnalités que vous voulez dans votre propre classe, à l'aide de Long.MAX_VALUE sera plus susceptible de vous causer des problèmes.
+1 à la Longue.MAX_VALUE suggestions. Il semble que cela pourrait vous aider si vous triez les choses par votre champ de date.
Cependant, au lieu de la construction d'une date à partir de certains de la grande valeur de la constante où jamais vous avez besoin de la date, de l'utilisation d'un monde visible singleton de tenir une instance de Date qui représente votre valeur spéciale:
Ensuite, vous pouvez utiliser identité simple comparaison (madate == DateUtils.NO_EXPIRE) pour tester si une date en particulier est de votre cas particulier, au lieu de l'obj.equals(); (ie. madate.equals ( DateUtils.NO_EXPIRE ); )
Voici ce que je fais:
Noter que si le Fuseau horaire n'est PAS l'UTC vous permettra d'obtenir des compensations de la "fin des temps", qui ne sera pas maximale des valeurs. Elles sont particulièrement utiles pour les insérer dans des champs de Base de données et ne pas avoir à subir les dates NULLES.
avez-vous envisagé l'adoption de l'utilisation de Joda Time?
Il est prévu pour être inclus dans java 7, comme étant la base pour JSR 310
La fonctionnalité qui vous intéresse est ZeroIsMaxDateTimeField
essentiellement des swaps zéro des champs pour le maximum de valeur pour ce champ dans la date-heure.
Un problème que je vois, c'est que pour le tri sur la date d'expiration, à l'aide d'une valeur null n'est pas facilement sortable. Afin de la remplacer par une valeur réelle (même si c'est un arbitraire sentinelle de la valeur dans le futur) peut être nécessaire.
Je suppose une autre façon de traiter "aucune date d'expiration" est simplement de dire quelque chose de l'expiration de 100 ans dans l'avenir... à Moins que votre base de données est de traiter avec des contrats à long terme!
De Java SE 8, vous pouvez utiliser:
Peut-être une option est d'utiliser au maximum le système de date. Vous pouvez l'obtenir en utilisant: