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?
4 Réponses :
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);
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).
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
Je voudrais utiliser LocalDate now = LocalDate.now (ZoneOffset.UTC);
pour définir l'heure UTC
.
@Arefe J'ai édité la réponse
Vous pouvez obtenir en utilisant LocalDate
LocalDate startOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); LocalDate endOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
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 dateUTC
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èquejava.time.LocalDate
.En effet, un doublon ... je ne sais pas pourquoi je ne reçois pas cela dans la recherche Google.