DateUtils

日期操作工具類,涵蓋了大部分的日期操作

package sg.biyong.utils;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 日期操作工具類
 */
public class DateUtils {
    /**
     * 日期轉(zhuǎn)換-  String -> Date
     *
     * @param dateString 字符串時(shí)間
     * @return Date類型信息
     * @throws Exception 拋出異常
     */
    public static Date parseString2Date(String dateString) throws Exception {
        if (dateString == null) {
            return null;
        }
        return parseString2Date(dateString, "yyyy-MM-dd");
    }

    /**
     * 日期轉(zhuǎn)換-  String -> Date
     *
     * @param dateString 字符串時(shí)間
     * @param pattern    格式模板
     * @return Date類型信息
     * @throws Exception 拋出異常
     */
    public static Date parseString2Date(String dateString, String pattern) throws Exception {
        if (dateString == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = sdf.parse(dateString);
        return date;
    }

    /**
     * 日期轉(zhuǎn)換 Date -> String
     *
     * @param date Date類型信息
     * @return 字符串時(shí)間
     * @throws Exception 拋出異常
     */
    public static String parseDate2String(Date date) throws Exception {
        if (date == null) {
            return null;
        }
        return parseDate2String(date, "yyyy-MM-dd");
    }

    /**
     * 日期轉(zhuǎn)換 Date -> String
     *
     * @param date    Date類型信息
     * @param pattern 格式模板
     * @return 字符串時(shí)間
     * @throws Exception 拋出異常
     */
    public static String parseDate2String(Date date, String pattern) throws Exception {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String strDate = sdf.format(date);
        return strDate;
    }

    /**
     * 獲取當(dāng)前日期的本周一是幾號
     *
     * @return 本周一的日期
     */
    public static Date getThisWeekMonday() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        // 獲得當(dāng)前日期是一個(gè)星期的第幾天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 設(shè)置一個(gè)星期的第一天,按中國的習(xí)慣一個(gè)星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 獲得當(dāng)前日期是一個(gè)星期的第幾天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根據(jù)日歷的規(guī)則,給當(dāng)前日期減去星期幾與一個(gè)星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    /**
     * 獲取當(dāng)前日期周的最后一天
     *
     * @return 當(dāng)前日期周的最后一天
     */
    public static Date getSundayOfThisWeek() {
        Calendar c = Calendar.getInstance();
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayOfWeek == 0) {
            dayOfWeek = 7;
        }
        c.add(Calendar.DATE, -dayOfWeek + 7);
        return c.getTime();
    }

    /**
     * 根據(jù)日期區(qū)間獲取月份列表
     *
     * @param minDate 開始時(shí)間
     * @param maxDate 結(jié)束時(shí)間
     * @return 月份列表
     * @throws Exception
     */
    public static List<String> getMonthBetween(String minDate, String maxDate, String format) throws Exception {
        ArrayList<String> result = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();

        min.setTime(sdf.parse(minDate));
        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

        max.setTime(sdf.parse(maxDate));
        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
        SimpleDateFormat sdf2 = new SimpleDateFormat(format);

        Calendar curr = min;
        while (curr.before(max)) {
            result.add(sdf2.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);
        }

        return result;
    }

    /**
     * 根據(jù)日期獲取年度中的周索引
     *
     * @param date 日期
     * @return 周索引
     * @throws Exception
     */
    public static Integer getWeekOfYear(String date) throws Exception {
        Date useDate = parseString2Date(date);
        Calendar cal = Calendar.getInstance();
        cal.setTime(useDate);
        return cal.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 根據(jù)年份獲取年中周列表
     *
     * @param year 年分
     * @return 周列表
     * @throws Exception
     */
    public static Map<Integer, String> getWeeksOfYear(String year) throws Exception {
        Date useDate = parseString2Date(year, "yyyy");
        Calendar cal = Calendar.getInstance();
        cal.setTime(useDate);
        //獲取年中周數(shù)量
        int weeksCount = cal.getWeeksInWeekYear();
        Map<Integer, String> mapWeeks = new HashMap<>(55);
        for (int i = 0; i < weeksCount; i++) {
            cal.get(Calendar.DAY_OF_YEAR);
            mapWeeks.put(i + 1, parseDate2String(getFirstDayOfWeek(cal.get(Calendar.YEAR), i)));
        }
        return mapWeeks;
    }

    /**
     * 獲取某年的第幾周的開始日期
     *
     * @param year 年分
     * @param week 周索引
     * @return 開始日期
     * @throws Exception
     */
    public static Date getFirstDayOfWeek(int year, int week) throws Exception {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getFirstDayOfWeek(cal.getTime());
    }

    /**
     * 獲取某年的第幾周的結(jié)束日期
     *
     * @param year 年份
     * @param week 周索引
     * @return 結(jié)束日期
     * @throws Exception
     */
    public static Date getLastDayOfWeek(int year, int week) throws Exception {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getLastDayOfWeek(cal.getTime());
    }

    /**
     * 獲取當(dāng)前時(shí)間所在周的開始日期
     *
     * @param date 當(dāng)前時(shí)間
     * @return 開始時(shí)間
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.SUNDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
        return c.getTime();
    }

    /**
     * 獲取當(dāng)前時(shí)間所在周的結(jié)束日期
     *
     * @param date 當(dāng)前時(shí)間
     * @return 結(jié)束日期
     */
    public static Date getLastDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.SUNDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
        return c.getTime();
    }
    //獲得上周一的日期
    public static Date geLastWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, -7);
        return cal.getTime();
    }

    //獲得本周一的日期
    public static Date getThisWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 獲得當(dāng)前日期是一個(gè)星期的第幾天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 設(shè)置一個(gè)星期的第一天,按中國的習(xí)慣一個(gè)星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 獲得當(dāng)前日期是一個(gè)星期的第幾天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根據(jù)日歷的規(guī)則葡盗,給當(dāng)前日期減去星期幾與一個(gè)星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    //獲得下周一的日期
    public static Date getNextWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, 7);
        return cal.getTime();
    }

    //獲得今天日期
    public static Date getToday(){
        return new Date();
    }

    //獲得本月一日的日期
    public static Date getFirstDay4ThisMonth(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH,1);
        return calendar.getTime();
    }

    public static void main(String[] args) {
        try {
            System.out.println("本周一" + parseDate2String(getThisWeekMonday()));
            System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Zm-7.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吏奸,一起剝皮案震驚了整個(gè)濱河市薛耻,隨后出現(xiàn)的幾起案子帜矾,更是在濱河造成了極大的恐慌,老刑警劉巖毁涉,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沉帮,死亡現(xiàn)場離奇詭異,居然都是意外死亡贫堰,警方通過查閱死者的電腦和手機(jī)穆壕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來其屏,“玉大人喇勋,你說我怎么就攤上這事蔚约『晾拢” “怎么了它碎?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵驼仪,是天一觀的道長。 經(jīng)常有香客問我嘹锁,道長膜赃,這世上最難降的妖魔是什么诉稍? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任妙真,我火速辦了婚禮缴允,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隐孽。我一直安慰自己癌椿,他們只是感情好健蕊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布菱阵。 她就那樣靜靜地躺著,像睡著了一般缩功。 火紅的嫁衣襯著肌膚如雪晴及。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天嫡锌,我揣著相機(jī)與錄音虑稼,去河邊找鬼。 笑死势木,一個(gè)胖子當(dāng)著我的面吹牛蛛倦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啦桌,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼溯壶,長吁一口氣:“原來是場噩夢啊……” “哼及皂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起且改,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤验烧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后又跛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碍拆,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年慨蓝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了感混。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡礼烈,死狀恐怖浩习,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情济丘,我是刑警寧澤谱秽,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站摹迷,受9級特大地震影響疟赊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峡碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一近哟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲫寄,春花似錦吉执、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至未斑,卻和暖如春咕宿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜡秽。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工府阀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芽突。 一個(gè)月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓试浙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寞蚌。 傳聞我的和親對象是個(gè)殘疾皇子田巴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評論 2 350