我有一个简单但棘手的代码,该代码以UTC时间指定今天的日期字符串。
String s = Instant.now().toString().replaceAll("T.*", "");
我需要找到上个月的头几天和最后几天,并将它们存储在单独的字符串中。关于如何最佳实现的任何建议?
答案 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);