1
votes

trouver la première et la dernière date du mois dernier

J'ai un code simple mais délicat à écrire où j'ai donné la chaîne de date d'aujourd'hui en heure UTC.

String s = Instant.now().toString().replaceAll("T.*", "");

J'ai besoin de trouver le premier et le dernier jour du mois dernier et de les stocker dans des chaînes séparées. Des conseils pour y parvenir au mieux?


5 commentaires

N'utilisez pas de chaînes mais des dates pour commencer.


LocalDate.now () ?


Veuillez inclure des exemples de données et expliquer pourquoi vous ne pouvez pas simplement utiliser now () comme suggéré, ainsi que la sortie attendue.


@JoakimDanielson J'utilise import java.time. * et je ne veux pas me mêler de nombreuses bibliothèques. De plus, je dois faire attention à connaître la date UTC actuelle et à trouver la première et la dernière date du mois dernier. Ok, je trouve qu'ils sont en effet dans la même bibliothèque java.time.LocalDate .


En effet, un doublon ... je ne sais pas pourquoi je ne reçois pas cela dans la recherche Google.


4 Réponses :


2
votes

C'est assez simple lorsque vous utilisez LocalDate et ses fonctions arithmétiques de date:

LocalDate now = LocalDate.now();
LocalDate firstDayOfCurrentMonth = now.withDayOfMonth(1);

LocalDate firstDayOfLastMonth = firstDayOfCurrentMonth.minusMonths(1);
LocalDate lastDayOfLastMonth = firstDayOfCurrentMonth.minusDays(1);


0 commentaires

4
votes

Vous pouvez utiliser TemporalAdjusters .

Si vous n'avez pas à commencer par une chaîne, ne le faites pas. Commencez par un LocalDate si possible.

Si vous devez commencer par une chaîne, vous pouvez convertir vos s chaîne en LocalDate par parse:

LocalDate startOfMonth = ld.with(TemporalAdjusters.firstDayOfMonth());
LocalDate endOfMonth = ld.with(TemporalAdjusters.lastDayOfMonth());

Nous pouvons maintenant obtenir le début et la fin du mois comme ceci:

LocalDate ld = LocalDate.parse(s);

Je vous suggère de ne pas les convertir en chaînes jusqu'à ce que ce soit absolument nécessaire (comme vous l'avez affiché à l'utilisateur).


0 commentaires

2
votes

Si vous souhaitez obtenir le mois avant la date actuelle, utilisez le code ci-dessous:

LocalDate today = LocalDate.now(ZoneOffset.UTC);  // Retrieve the date now
LocalDate lastMonth = today.minus(1, ChronoUnit.MONTHS); // Retrieve the date a month from now
System.out.println("First day: " + lastMonth.withDayOfMonth(1)); // retrieve the first date
System.out.println("Last day: " + lastMonth.withDayOfMonth(lastMonth.lengthOfMonth())); // retrieve the last date


2 commentaires

Je voudrais utiliser LocalDate now = LocalDate.now (ZoneOffset.UTC); pour définir l'heure UTC .


@Arefe J'ai édité la réponse



4
votes

Vous pouvez obtenir en utilisant LocalDate

LocalDate startOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
LocalDate endOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());


0 commentaires