查找上个月的第一个和最后一个日期
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());
我有一个简单但棘手的代码要编写,其中我以 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());