Java: la Façon la plus Facile de Soustraire des Dates
J'ai créé une classe avec deux champs qui doivent être des dates, start_date
et date_passed
. J'ai fait des recherches sur la meilleure façon de java ont des dates dans un YYYY MM DD
format qui facilite la date de la soustraction, et la capacité de "make-up" un jour, dire que dans le futur par exemple.
Exemple de ce que je voudrais faire...
library.circulate_book("Chemistry", **start date here**) //actual date or random date
library.pass_book("Chemistry", **Date Passed here**) //random date such as 5 days after start date
int days_had = Date_Passed - start_date
Jusqu'à présent, j'ai trouvé beaucoup de façons de mettre en forme des dates à l'aide des Calendriers et des classes de Date, mais n'ai pas encore trouvé un qui ressemble comme il aurait à examiner la plupart des dates de fin des Chaînes de caractères. Toutes les suggestions/petits exemples sont grandement appréciés! Aussi, tous les liens vers des exemples serait génial!
OriginalL'auteur Bob | 2015-11-04
Vous devez vous connecter pour publier un commentaire.
tl;dr
Pour passer d'une date à l'autre en ajoutant ou en supprimant un certain nombre de jours.
Pour calculer le nombre de jours, de mois et d'années se sont écoulés entre deux dates.
Analyse
D'abord, vous devez analyser votre chaîne entrées en date-heure d'objets. Ensuite, vous travaillez sur préformage votre la logique métier avec ces objets.
Arrêter de penser de la date-heure de valeurs comme des chaînes de caractères, qui vous conduira fou. Nous travaillons avec date-heure d'objets dans notre code, nous avons échanger des données avec d'autres utilisateurs ou d'autres applications à l'aide d'une représentation de Chaîne de l'objet date-heure.
Dans Java 8 et les versions ultérieures, utilisez le java.le temps cadre. Voir Tutoriel.
Vous voulez seulement un jour, sans le temps de la journée, donc on peut utiliser le
LocalDate
classe.Que funky double deux-points syntaxe est un méthode de référence, une façon de dire quelle méthode doit être appelée par un autre code.
Date actuelle
La détermination de la date d'aujourd'hui nécessite un temps de traitement de la zone. Pour un moment donné, la date varie à travers le monde par zone.
Si vous voulez la JVM par défaut en cours de fuseau horaire, appelez
ZoneId.systemDefault
.Soustraire Des Dates
Cela a été abordé de nombreuses fois avant de StackOveflow.com. Par exemple, Comment soustraire les X jours à compter d'une date à l'aide de Java calendrier?. Pour plus de détails, voir les autres Réponses comme est ce que m' et est ce que m' pour plus de détails. Astuce: "écoulé" est une des clés de recherche de mot.
Brièvement, l'utilisation d'un
Délai
de définir un certain nombre de jours, de mois et d'années.De vidage de la console.
Note la limitation que
Period
ne fonctionne qu'avec tout les jours, qui est, de date uniquement des valeurs sans le temps de la journée. C'est ce que nous avons besoin ici de cette Question, de sorte que le travail est accompli. Si vous aviez date valeurs de temps (ZonedDateTime
objets), utilisez la ThreeTen-Extra du projetDays
classe comme indiqué dans Question/Réponse ci-dessus.2015 04 11
pour aujourd'hui?Serait
now()
pouvoir être soustrait de dates plus tard dans le programme commeLocalDate localDate = formatter.parse ( input , LocalDate :: from );
Vous semblez toujours coincé sur l'amalgame entre la date de valeurs de temps avec leurs représentations de Chaîne. Pour obtenir "aujourd'hui", il suffit d'appeler
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ;)
. Le fuseau horaire est crucial dans la détermination d'une date (pensez-y!). Pour une Chaîne, utilisez le même formateur vu ci-dessus:String output = today.format( formatter );
. Recherche d'autres StackOveflow pages sur ce sujet.OriginalL'auteur Basil Bourque
La meilleure façon de le faire en Java-8 n'est pas l'imparfait réponse de Basilic Bourque, mais cette approche:
La suggestion de
java.time.Period.getDays()
est dangereux et souvent mal dès que l'écoulement de la durée est supérieure à un mois. L'ensemble de laPeriod
est P1M27D donc ce code efficacement que les requêtes de la quantité partielle de jours écoulés (il y a aussi un écoulé mois):Une solution satisfaisante à l'aide des classes
java.util.Date
,GregorianCalendar
etc. est difficile à trouver. Vous pouvez utiliser la réponse de Tacktheritrix, mais doivent être conscients du fait que le calcul de nombre de jours écoulés peuvent différer en raison de la sous-jour-des pièces dejava.util.Date
et n'est pas fiable en raison de l'ignorance de la journée-lumière d'économie d'interrupteurs (le cas de l'horloge sauts d'une heure dans de nombreuses parties du monde).Note de côté: Au moins 8 bibliothèques externes offre de bonnes réponses à votre problème. Mais je pense que, votre simple d'utilisation-cas ne justifie pas l'intégration d'une bibliothèque, sauf si vous n'êtes pas encore sur Java 8. Aucune solution de remplacement la manière de compter les jours écoulés entre deux dates ne serait pas plus facile que dans Java 8 - seulement semblables. Et puisque vous avez accepté la Java-8-connexes réponse de Basilic Bourque, je suppose que vous êtes bien sur Java 8 donc, je laisse la réponse, la façon de résoudre votre problème avec d'autres bibliothèques.
OriginalL'auteur Meno Hochschild
utilisation de java 8 date de l'api ou de joda, pas besoin de nouvelles inventions.
vous trouverez quelques exemples ici: http://examples.javacodegeeks.com/core-java/java-8-datetime-api-tutorial/
Qu'est-ce exactement joda et comment puis-je l'obtenir?
Je pense que vous êtes en mesure d'utiliser google, non ?
non, c'est effectivement bloqué sur nos systèmes à l'école, la chance de droite?
De faire une vraie réponse, au lieu d'un lien seule réponse, s'il vous plaît montrer comment pour ce faire avec java 8 date de l'api et/ou de joda time.
OriginalL'auteur Emerson Cod
Voici une réponse à l'aide de
Calendar
:OriginalL'auteur Evan LaHurd
Si vous êtes coincé withan âgés de java, vous pouvez utiliser SimpleDateFormat.
OriginalL'auteur liloargana