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

Java 查找上个月的第一个和最后一个日期,java,datetime,utc,Java,Datetime,Utc,我有一个简单但棘手的代码要写,其中我以UTC时间给出了今天的日期字符串 String s = Instant.now().toString().replaceAll("T.*", ""); 我需要找到上个月的第一天和最后一天,并将它们存储在单独的字符串中。关于如何达到最佳效果有什么建议吗?使用LocalDate及其日期算术函数非常简单: LocalDate now = LocalDate.now(); LocalDate firstDayOfCurrentMonth = now.withDay

我有一个简单但棘手的代码要写,其中我以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);

使用LocalDate及其日期算术函数非常简单:

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

LocalDate firstDayOfLastMonth = firstDayOfCurrentMonth.minusMonths(1);
LocalDate lastDayOfLastMonth = firstDayOfCurrentMonth.minusDays(1);
你可以利用

如果不必以字符串开头,就不要。如果可能的话,从LocalDate开始

如果必须以字符串开头,可以通过解析将字符串转换为LocalDate:

现在我们可以像这样得到这个月的开始和结束:

LocalDate startOfMonth = ld.with(TemporalAdjusters.firstDayOfMonth());
LocalDate endOfMonth = ld.with(TemporalAdjusters.lastDayOfMonth());
我建议您不要将它们转换为字符串,直到必要时才将其显示给用户。

您可以使用

如果不必以字符串开头,就不要。如果可能的话,从LocalDate开始

如果必须以字符串开头,可以通过解析将字符串转换为LocalDate:

现在我们可以像这样得到这个月的开始和结束:

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 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获取


对于初学者,不要使用字符串,而是使用日期。LocalDate.now?请包含示例数据,并解释为什么不能按照建议使用now,以及预期的输出。@JoakimDanielson我使用导入java.time.*并且不想与许多库混淆。此外,我需要小心知道当前UTC日期,并找到上个月的第一个+最后一个日期。好的,我只是发现它们确实在同一个库java.time.LocalDate中。。。不确定为什么我在谷歌搜索中没有得到这些信息。不要使用字符串,而是使用日期。LocalDate.now?请包括示例数据,并解释为什么不能按照建议使用now,以及预期的输出。@JoakimDanielson我使用导入java.time.*并且不想与许多库混淆。此外,我需要小心知道当前UTC日期,并找到上个月的第一个+最后一个日期。好的,我只是发现它们确实在同一个库java.time.LocalDate中。。。不知道为什么我在谷歌搜索中没有找到它。我想使用LocalDate now=LocalDate.nowZoneOffset.UTC;设置UTC时间。@Arefe我已经编辑了答案,我想使用LocalDate now=LocalDate.nowZoneOffset.UTC;设置UTC时间。@Arefe我已经编辑了答案