查找上个月的第一个和最后一个日期

find first and last date of the last month

我有一个简单但棘手的代码要编写,其中我以 UTC 时间给出了今天的日期字符串。

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

我需要找到上个月的第一天和最后一天,并将它们存储在单独的字符串中。关于如何最好地实现它有什么建议吗?

使用LocalDate及其日期运算函数就很简单了:

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

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

你可以利用TemporalAdjusters

如果您不必以字符串开头,那就不要。如果可能,以 LocalDate 开头。

如果必须以字符串开头,可以通过 parse:

将字符串 s 转换为 LocalDate
LocalDate ld = LocalDate.parse(s);

现在我们可以这样得到月初和月底:

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

我建议您不要将它们转换为字符串,除非绝对必要(比如您将其显示给用户)。

如果您想获取当前日期之前的月份,请使用以下代码:

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

您可以使用 LocalDate

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