簡體   English   中英

如何使用java8獲取上周和上個月

[英]How to get last week and last month with java8

我有約會,我需要知道日期前的最后一周和上個月。

例如,

在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日。

它不同於基於本地日的第一天的獲取日期 - 現在在java-8 ,我的問題是上周或上個月。

您可以使用這些輔助方法。

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};
}

實際上有很多方法可以寫這個。 我建議你自己做一些探索。

您可以使用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);

結果

WeekStart:2018-07-09,周末:2018-07-15,monthStart:2018-06-01,monthEnd:2018-06-30

如果你改變了現在的行

LocalDate now = LocalDate.of(2018,07,15);

你會得到:

WeekStart:2018-07-02,weekEnd:2018-07-08,monthStart:2018-06-01,monthEnd:2018-06-30

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

不確定你是否有一個Date對象,希望你有。 從date對象,你可以使用方法toInstant()獲得Instant(To pasrse String to date ..

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM