我有个约会,我需要知道约会的最后一周和最后一个月。
例如
2018年7月15日,它的最后一周是7月2日至7月8日。它的最后一个月是6月1日至6月30日。
2018年7月16日,它的最后一周是7月9日至7月15日。它的最后一个月是6月1日至6月30日。
2018年7月17日,它的最后一周是7月9日至7月15日。它的最后一个月是6月1日至6月30日。
它与get-date-of-first-day-of-week-based-on-localdate-now-in-java-8不同,我的问题是上周或上个月。
答案 0 :(得分:5)
您可以使用这些帮助方法。
public static LocalDate[] getPreviousWeek(LocalDate date) {
final int dayOfWeek = date.getDayOfWeek().getValue();
final LocalDate from = date.minusDays(dayOfWeek + 6); // (dayOfWeek - 1) + 7
final LocalDate to = date.minusDays(dayOfWeek);
return new LocalDate[]{from, to};
}
public static LocalDate[] getPreviousMonth(LocalDate date) {
final LocalDate from = date.minusDays(date.getDayOfMonth() - 1).minusMonths(1);
final LocalDate to = from.plusMonths(1).minusDays(1);
return new LocalDate[]{from, to};
}
事实上,有许多写方法。我建议您自己进行一些探索。
答案 1 :(得分:2)
您可以使用Java 8 LocalDate轻松做到这一点,这是我的解决方案:
import java.time.LocalDate;
LocalDate now = LocalDate.now();
LocalDate weekStart = now.minusDays(7+now.getDayOfWeek().getValue()-1);
LocalDate weekEnd = now.minusDays(now.getDayOfWeek().getValue());
LocalDate previousMonth = now.minusMonths(1);
LocalDate monthStart = previousMonth.withDayOfMonth(1);
LocalDate monthEnd = previousMonth.withDayOfMonth(previousMonth.getMonth().maxLength());
System.out.println("WeekStart:"+weekStart+", weekEnd:"+weekEnd+", monthStart:"+monthStart+", monthEnd:"+monthEnd);
结果
周开始:2018-07-09,周结束:2018-07-15,月开始:2018-06-01,月结束:2018-06-30
如果您将now行更改为
LocalDate now = LocalDate.of(2018,07,15);
您将获得:
周开始:2018-07-02,周结束:2018-07-08,月开始:2018-06-01,月结束:2018-06-30
答案 2 :(得分:1)
ZonedDateTime
对此很有用。
import java.time.*;
import java.time.format.DateTimeFormatter;
class DateTest
{
public static void main (String[] args) throws java.lang.Exception
{
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd MMM yyyy");
ZoneId usCentral = ZoneId.of("America/Chicago");
LocalDateTime localDateTime = LocalDateTime.of(2018, Month.JULY, 16, 9, 30);
ZonedDateTime input = ZonedDateTime.of(localDateTime, usCentral);
System.out.println("Input date = " + format.format(input));
ZonedDateTime startDate = input.minusWeeks(1).with(DayOfWeek.MONDAY);
System.out.println("Start date = " + format.format(startDate));
ZonedDateTime endDate = startDate.plusDays(6);
System.out.println("End date = " + format.format(endDate));
}
}
输出:
Input date = 16 Jul 2018
Start date = 09 Jul 2018
End date = 15 Jul 2018
答案 3 :(得分:-1)
不确定是否有Date对象,希望有。 从日期对象,您可以使用toInstant()方法获取Instant (要粘贴迄今为止的字符串。
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
日期格式必须适应您的课程需求 )
Instant.now().minus(Duration.ofDays(7))); // last week
Instant.now().minus(Duration.of(1,ChronoUnit.MONTHS)) // last month