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

时间:2019-03-04 07:59:09

标签: java datetime utc

我有一个简单但棘手的代码,该代码以UTC时间指定今天的日期字符串。

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

我需要找到上个月的头几天和最后几天,并将它们存储在单独的字符串中。关于如何最佳实现的任何建议?

4 个答案:

答案 0 :(得分:3)

您可以使用TemporalAdjusters

如果您不必以字符串开头,则不必。尽可能以LocalDate开始。

如果必须以字符串开头,则可以通过s将字符串LocalDate转换为parse

LocalDate ld = LocalDate.parse(s);

现在我们可以像这样获取月份的开始和结束:

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

我建议您在绝对必要之前(例如将其显示给用户)不要将它们转换为字符串。

答案 1 :(得分:2)

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

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 :(得分:2)

您可以使用LocalDate

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

答案 3 :(得分:1)

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

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

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