jdk8 獲取當天,本週,本月,本季度,本年起始時間工具類

package com.wanmi.sbc.util;

import org.omg.Messaging.SYNC_WITH_TRANSPORT;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;

/**
 * jdk8 獲取當天,本週,本月,本季度,本年起始時間工具類
 */
public class DateUtils {

    public static final int CURRENT = 0;

    public static final int NEXT = 1;

    public static final int PREVIOUS = -1;

    public static final int QUARTER =3;

    /**
     * 獲取某天的開始日期
     *
     * @param offset 0今天,1明天,-1昨天,依次類推
     * @return
     */
    public static LocalDateTime dayStart(int offset) {

        return LocalDateTime.of(LocalDate.now().plusDays(offset), LocalTime.MIN);
    }

    /**
     * 獲取某周的開始日期
     *
     * @param offset 0本週,1下週,-1上週,依次類推
     * @return
     */
    public static LocalDateTime weekStart(int offset) {

        return LocalDateTime.now().plusWeeks(offset).with(DayOfWeek.MONDAY).minusDays(NEXT);
    }

    /**
     * 獲取某月的開始日期
     *
     * @param offset 0本月,1下個月,-1上個月,依次類推
     * @return
     */
    public static LocalDateTime monthStart(int offset) {
        return LocalDateTime.now().plusMonths(offset).with(TemporalAdjusters.firstDayOfMonth()).minusDays(NEXT);
    }


    /**
     * 獲取某季度的開始日期
     * 季度一年四季, 第一季度:2月-4月, 第二季度:5月-7月, 第三季度:8月-10月, 第四季度:11月-1月
     *
     * @param offset 0本季度,1下個季度,-1上個季度,依次類推
     * @return
     */
    public static LocalDateTime quarterStart(int offset) {
        final LocalDateTime date = LocalDateTime.now().plusMonths(offset * 3);
        int month = date.getMonth().getValue();//當月
        int start = 0;
        if (month >= 2 && month <= 4) {//第一季度
            start = 2;
        } else if (month >= 5 && month <= 7) {//第二季度
            start = 5;
        } else if (month >= 8 && month <= 10) {//第三季度
            start = 8;
        } else if ((month >= 11 && month <= 12)) {//第四季度
            start = 11;
        } else if (month == 1) {//第四季度
            start = 11;
            month = 13;
        }
        return date.plusMonths(start - month).with(TemporalAdjusters.firstDayOfMonth()).minusDays(NEXT);
    }

    /**
     * 獲取某年的開始日期
     *
     * @param offset 0今年,1明年,-1去年,依次類推
     * @return
     */
    public static LocalDateTime yearStart(int offset) {
        return LocalDateTime.now().plusYears(offset).with(TemporalAdjusters.firstDayOfYear());
    }

    public static void main(String[] args) {

        System.out.println("當天開始時間>>>"+dayStart(CURRENT));
        System.out.println("當天結束時間>>>"+dayStart(NEXT));

        System.out.println("本週開始時間>>>"+weekStart(CURRENT));
        System.out.println("本週結束時間>>>"+weekStart(NEXT));

        System.out.println("本月開始時間>>>"+monthStart(CURRENT));
        System.out.println("本月結束時間>>>"+monthStart(NEXT));

        System.out.println("本年開始時間>>>"+yearStart(CURRENT));
        System.out.println("本年結束時間>>>"+yearStart(NEXT));

        System.out.println("本季度開始時間>>>"+quarterStart(CURRENT));
        System.out.println("本季度結束時間>>>"+quarterStart(NEXT));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章