簡體   English   中英

使用java日歷類獲取一周的開始和結束日期

[英]Getting the start and the end date of a week using java calendar class

我想獲取給定日期的一周的最后一周和第一周。 例如,如果日期是 2011 年 10 月 12 日,那么我需要日期 2011 年 10 月 10 日(作為一周的開始日期)和 2011 年 10 月 16 日(作為一周的結束日期) 有誰知道如何使用日歷獲取這兩個日期類(java.util.Calendar)非常感謝!

一些代碼如何使用Calendar對象執行此操作。 我還應該提到joda 時間庫,因為它可以幫助您解決許多Date/Calendar問題。

代碼

public static void main(String[] args) {

    // set the date
    Calendar cal = Calendar.getInstance();
    cal.set(2011, 10 - 1, 12);

    // "calculate" the start date of the week
    Calendar first = (Calendar) cal.clone();
    first.add(Calendar.DAY_OF_WEEK, 
              first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK));

    // and add six days to the end date
    Calendar last = (Calendar) first.clone();
    last.add(Calendar.DAY_OF_YEAR, 6);

    // print the result
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(df.format(first.getTime()) + " -> " + 
                       df.format(last.getTime()));
}

此解決方案適用於任何語言環境(一周的第一天可以是星期日或星期一)。

Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - c.getFirstDayOfWeek();
c.add(Calendar.DAY_OF_MONTH, -dayOfWeek);

Date weekStart = c.getTime();
// we do not need the same day a week after, that's why use 6, not 7
c.add(Calendar.DAY_OF_MONTH, 6); 
Date weekEnd = c.getTime();

例如,今天是 2014 年 1 月 29 日。對於以星期日為一周第一天的語言環境,您將獲得:

    start: 2014-01-26
    end: 2014-02-01

對於以星期一為第一天的語言環境,日期將是:

    start: 2014-01-27
    end: 2014-02-02

如果你想要所有的日期那么

first.add(Calendar.DAY_OF_WEEK,first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK)); 

for (int i = 1; i <= 7; i++) {
    System.out.println( i+" Day Of that Week is",""+first.getTime());
    first.add(Calendar.DAY_OF_WEEK,1);
}

這是示例代碼

public static void main(String[] args) {

    Calendar cal = Calendar.getInstance();
    cal.set(2016, 2, 15);

    {
        Calendar startCal = Calendar.getInstance();
        startCal.setTimeInMillis(cal.getTimeInMillis());

        int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK);
        startCal.set(Calendar.DAY_OF_MONTH,
                (startCal.get(Calendar.DAY_OF_MONTH) - dayOfWeek) + 1);

        System.out.println("end date : " + startCal.getTime());
    }

    {
        Calendar endCal = Calendar.getInstance();
        endCal.setTimeInMillis(cal.getTimeInMillis());

        int dayOfWeek = endCal.get(Calendar.DAY_OF_WEEK);
        endCal.set(Calendar.DAY_OF_MONTH, endCal.get(Calendar.DAY_OF_MONTH)
                + (7 - dayOfWeek));

        System.out.println("start date : " + endCal.getTime());

    }
}

這將打印

start date : Sun Mar 13 20:30:30 IST 2016
end date : Sat Mar 19 20:30:30 IST 2016

我發現接受的答案中的公式僅在某些情況下有效。 例如,您的一周從星期六開始,而今天是星期日。 為了到達一周的第一天,我們往回走 1 天,但公式cal.get(Calendar.DAY_OF_WEEK) - cal.getFirstDayOfWeek()將給出答案 -6。 解決方案是使用模數,這樣公式就可以這么說。

int daysToMoveToStartOfWeek =  (
  7 + 
  cal.get(Calendar.DAY_OF_WEEK) - 
  cal.getFirstDayOfWeek()
)%7;

cal.add(Calendar.DAY_OF_WEEK, -1 * daysToMoveToStartOfWeek);

暫無
暫無

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

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