Comment obtenir la date du premier jour et le dernier jour du trimestre en cours en java.util.Date
J'ai besoin d'obtenir le premier jour du trimestre en cours comme java.util.Objet Date et l' date du dernier jour du trimestre en cours comme java.util.L'objet Date.
Je suis en utilisant des méthodes suivantes pour obtenir ce premier mois de la date et de ce mois de la date du dernier.
private Date getThisMonthFirstDate(){
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
private Date getThisMonthLastDate(){
Calendar calandar = new GregorianCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DATE, -1);
return calendar.getTime();
}
Est-il un moyen de modifier la fonction pour atteindre ce ou quelqu'un pourrait-il point d'une meilleure façon?
Supposons que T1 = Jan Fév Mar, T2 = Avr, Mai, Jun, etc.
Si vous utilisez zéro=mois de janvier, comme
moisactuel - (moisactuel % 3) vous donne le premier mois du trimestre en cours. Cela dit, vous devez utiliser le nouveau Java 8 de l'API du temps ou, si ce n'est sur l'île de Java 8, joda-time. Calendrier et Date sont terribles.
Notez que
Java 8 est-il assez facilement, c'est à dire ceci
Je suis un peu confus au sujet de votre getThisMonthLastDate() méthode depuis par l'exécution de calendrier.add(Calendar.DAY_OF_MONTH, -1); vous passez les derniers jours du mois. Peut-être diminuer par un deuxième ou à la milliseconde serait mieux.
Date
n', le début du trimestre est juste (year, 3*quarter, 1)
.moisactuel - (moisactuel % 3) vous donne le premier mois du trimestre en cours. Cela dit, vous devez utiliser le nouveau Java 8 de l'API du temps ou, si ce n'est sur l'île de Java 8, joda-time. Calendrier et Date sont terribles.
Notez que
Date
représente un instantané dans le temps, pas un "jour" (un 24-ish période de l'heure dans votre fuseau horaire local). En tant que telle, la "fin" d'un trimestre est le mieux représenté que le début du trimestre suivant, exclusif. Ainsi, un quart est défini par le timestamp de début de ce trimestre (inclus) au début du prochain trimestre (exclusif).Java 8 est-il assez facilement, c'est à dire ceci
Je suis un peu confus au sujet de votre getThisMonthLastDate() méthode depuis par l'exécution de calendrier.add(Calendar.DAY_OF_MONTH, -1); vous passez les derniers jours du mois. Peut-être diminuer par un deuxième ou à la milliseconde serait mieux.
OriginalL'auteur Asanka sanjaya | 2016-04-08
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner, mais je vous suggère de tester avec plus de soin que j'ai fait.
Remarque: la Division de valeurs int en Java renvoie la valeur plancher.
Depuis cette réponse, c'est de travailler pour mon cas de test, je vais donner la réponse correcte. Si quelqu'un a trouvé une erreur, veuillez le signaler ici 🙂
L'utilisation de ce dans un script Groovy, j'ai fini par avoir à utiliser les Mathématiques.sol et type de convertir un int. Sinon, fonctionne bien, merci!
OriginalL'auteur Volodymyr Masliy
Pur Java-8+ solution:
LocalDate firstDayOfQuarter = date.with(IsoFields.DAY_OF_QUARTER, 1L);
OriginalL'auteur Pavel
Comme d'autres l'ont mentionné, vous utilisez dépassé les classes. Sun/Oracle a décidé de remplacer les vieilles date à temps des cours avec le java.cadre de temps, un vaste amélioration.
Éviter la vieille date-heure classes. Ils sont vraiment mal conçu, confus et ennuyeux.
java.temps
La java.le temps cadre est intégré dans Java 8. Pour Java 6 & 7, utiliser l'arrière-port, ThreeTen-Backport. Pour Android, l'adaptation de l'arrière-port, ThreeTenABP.
La java.cadre de temps est inspiré par la très réussie Joda-Time library, défini par la JSR 310, et prolongée par le ThreeTen-projet Extra. Voir Oracle Tutoriel.
LocalDate
Pour une date seule valeur, sans le temps de la journée et sans fuseau horaire, utilisez
LocalDate
intégré dans le cadre de java.temps. Pour obtenir la date actuelle nécessite un temps de traitement de la zone de la date varie à travers le monde (un nouveau jour se lève plus tôt dans l'est).Quarter
&YearQuarter
La ThreeTen-Extra projet mentionné ci-dessus sert de terrain d'essai pour l'avenir possible d'ajouter des éléments à java.temps. Pour utiliser cette bibliothèque, ajouter son fichier jar de votre projet (ou de l'utilisation de Maven, etc.). Si vous ne voulez vraiment pas à ajouter une bibliothèque, voir une solution alternative Réponse par dheeran.
Cette bibliothèque comprend actuellement la
Trimestre
etYearQuarter
classes que vous pourriez trouver utiles. Plus sûr de passer autour des objets de ces types dans votre code, plutôt que d'utiliser des chaînes et des nombres pour représenter vos trimestres.La
YearQuarter
a de nombreuses méthodes utiles, y compris en demandant à ses dates.De vidage de la console.
Si vraiment vous ne souhaitez pas ajouter le ThreeTen-Extra bibliothèque comme je l'ai recommandé, voir la Réponse par Pavel pour une autre solution en utilisant uniquement le haut-java.temps classes. Mais si vous faites beaucoup de travail avec des quartiers, je suis sûr que vous trouverez ThreeTen-Extra vaut bien la peine d'ajouter une bibliothèque à votre projet.
Conversion
Si vous devez utiliser java.util.Date de travailler avec l'ancien code pas encore mis à jour pour java.moment, vous pouvez convertir en arrière et en avant. Trouver de nouvelles méthodes ajoutées aux anciennes classes pour la conversion.
Malheureusement, les anciennes classes de l'absence de tout moyen propre à représenter une date seule valeur. Donc il n'est pas parfaitement propre chemin à parcourir vers/à partir d'un
LocalDate
.java.sql.Date
La
java.sql.Date
classe prétend être une date seule, mais contient en fait un moment de la journée ajusté à00:00:00.0
. Cette classe maladroitement hérite dejava.util.Date
mais le doc clairement en garde contre l'utilisation de ce fait, vous êtes censés traiter les deux, que de séparer les classes indépendantes.java.util.Date
Un
java.util.Date
représente à la fois la date et l'heure de la journée, de manière efficace en UTC. Nous pouvons ajuster notreLocalDate
dans le premier moment de la journée pour obtenir une date avec l'heure de la journée, unZonedDateTime
. À partir de là, on peut se demander pour unInstant
qui est un moment sur la ligne de temps en temps UTC. L'ancien .Date de classe statiquesfrom( Instant )
méthode de conversion.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
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
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.
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.OriginalL'auteur Basil Bourque
C'est assez simple avec LocalDate
Cheers!
OriginalL'auteur dheeran
Vous pouvez utiliser joda:
Quand DateTime date = new DateTime(2016, 8, 12, 1, 1, 1);
J'obtiens:
Ok, je vois. Vous devriez certainement envisager de passer à joda.java.util.Date de l'api est tout simplement horrible et je n'ai jamais travaillé dans un projet qui l'utilise directement. Joda est devenu une sorte de standard.
Merci pour la mention :). Pour de futurs travaux, je vais utiliser Joda time au lieu de java.util.Date 🙂
Si à l'aide de Java 8, l'utilisation de java.temps. Il est inspiré de Joda time.
Certains une recherche rapide sur un Débordement de Pile montrera que le java.util.Date/.Calendrier des classes est un terrible gâchis et doit être évitée. Même Sun/Oracle a donné sur eux, en acceptant de les supplanter avec le java.les classes de temps.
OriginalL'auteur g-t