java常用日期处理函数

package cn.com.autohome.tuan.tzapp.util.utils;

import org.apache.commons.lang.StringUtils;

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


public final class DateHelper {

    public static final String YYYYMMDD = "yyyy-MM-dd";

    public static final String YYYYMMDDHHMMSS ="yyyy-MM-dd HH:mm:ss";

    public static final String MMDD = "MM月dd日";

    private DateHelper() {
        //can't instance
    }

    /**
     * 获取传入日期的当前月的第一天
     * @return date
     */
    public static Date getFirstDay(){
        //获取系统当前日期
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH,0);
        calendar.set(Calendar.DAY_OF_MONTH,1);
        return calendar.getTime();
    }

    /**
     * 获取系统时间
     */
    public static Date getSystemDate(){
        Calendar cal = Calendar.getInstance();
        return  cal.getTime();
    }

    /**
     * 获取当前系统时间对应星期内的星期一的日期
     */
    public static Date getMondayDate(Date dt){
        Date tmpDt = dt;
        if (tmpDt == null){
            tmpDt = getSystemDate();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(tmpDt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;
        Date result;
        switch (w){
            case 0:
                cal.add(Calendar.DAY_OF_MONTH,-6);
                result = cal.getTime();
                break;
            case 1:
                result = tmpDt;
                break;
            case 2:
                cal.add(Calendar.DAY_OF_MONTH,-1);
                result = cal.getTime();
                break;
            case 3:
                cal.add(Calendar.DAY_OF_MONTH,-2);
                result = cal.getTime();
                break;
            case 4:
                cal.add(Calendar.DAY_OF_MONTH,-3);
                result = cal.getTime();
                break;
            case 5:
                cal.add(Calendar.DAY_OF_MONTH,-4);
                result = cal.getTime();
                break;
            case 6:
                cal.add(Calendar.DAY_OF_MONTH,-5);
                result = cal.getTime();
                break;
            default:
                result = tmpDt;
                break;
        }

        return result;
    }

    /**
     * 获取当前时间的上一周的结束时间
     * @param dt
     */
    public static Date getLastModayEndDate(Date dt){
        Date tmpDt = dt;
        if(tmpDt == null){
            tmpDt = getSystemDate();
        }
        Date monday = getMondayDate(tmpDt);
        Calendar cal = Calendar.getInstance();
        cal.setTime(monday);
        cal.add(Calendar.DAY_OF_MONTH,-1);
        return  cal.getTime();
    }

    /**
     *获取当前时间的上一周的开始时间
     * @param dt
     */
    public static Date getLastMondayStartDate(Date dt){
        Date tmpDt = dt;
        if(tmpDt == null){
            tmpDt = getSystemDate();
        }
        Date monday = getMondayDate(tmpDt);
        Calendar cal = Calendar.getInstance();
        cal.setTime(monday);
        cal.add(Calendar.DAY_OF_MONTH,-1);
        Date sunday = cal.getTime();
        return getMondayDate(sunday);
    }

    /**
     * 把日期类型按照指定的格式转换成字符串
     * @param dt
     * @param pattern
     * @return string
     */
    public static  String toString(Date dt,String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.CHINA);
        if(dt == null){
            return null;
        }
        return  sdf.format(dt);
    }

    /**
     * 获取当前日期是本周的周几
     * @param dt
     * @return 周几
     */
    public static int weekDay(Date dt){
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;
        return w;
    }

    /**
     * 获取当前月的最近六个月
     * return 最近的六个月
     */
    public static Map<String,String> getYearMonth(){
        //时间格式
        SimpleDateFormat matter = new SimpleDateFormat("yyyy年MM月",Locale.CHINA);
        Map<String,String> map = new HashMap<String,String>();
        Calendar cal = Calendar.getInstance();
        //获取当前系统时间
        Date dt = cal.getTime();
        map.put("time01",getYearMonthByParam(dt,-1));
        map.put("time02",getYearMonthByParam(dt,-2));
        map.put("time03",getYearMonthByParam(dt,-3));
        map.put("time04",getYearMonthByParam(dt,-4));
        map.put("time05",getYearMonthByParam(dt,-5));
        return map;
    }

    /**
     * 根据传入的日期获取年月
     * @param dt
     * @param number
     * @return yyyy年MM月
     */
    public static String getYearMonthByParam(Date dt,int number){
        SimpleDateFormat matter = new SimpleDateFormat("yyyy年MM月",Locale.CHINA);
        if(dt == null){
            return null;
        }
        Date time = dt;
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);
        cal.add(Calendar.MONTH,number);
        return matter.format(cal.getTime());
    }

    /**
     * 返回当前月份
     * @return 月份
     */
    public static int getMonth(){
        Calendar cal = Calendar.getInstance();
        return cal.get(Calendar.MONTH)+1;
    }
    /**
     * 返回某月份
     * @return 月份
     */
    public static int getMonth(Date dt){
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        return cal.get(Calendar.MONTH)+1;
    }
    /**
     * 转换日期格式的String
     * @return
     */
    public static String formattDateStr(String date){
        String transDate = null;
        if(StringUtils.isEmpty(date)){
            return null;
        }
        transDate = date;
        return transDate.replace("年","-").replace("月","-")+"01 00:00:00";
    }

    /**
     * String日期转换成指定格式的日期格式
     * @param str
     * 待转换的日期
     * @param formatter
     * 转换格式
     * @return dt
     */
    public static Date toDateByFormatter(String str,String formatter){
        String fmt = formatter;
        if(StringUtils.isEmpty(fmt)){
            fmt ="yyyy-MM-dd";
        }
        DateFormat sdf = new SimpleDateFormat(fmt,Locale.CHINA);
        Date dt = null;
        try{
            dt = sdf.parse(str);
        }catch (ParseException e){
            e.printStackTrace();
        }
        return dt;
    }

    /**
     * 得到本月的第一天
     * @return
     */
    public static String getMonthFirstDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, calendar
                .getActualMinimum(Calendar.DAY_OF_MONTH));

        return toString(calendar.getTime(), YYYYMMDD);
    }

    /**
     * 得到本月的最后一天
     *
     * @return
     */
    public static String getMonthLastDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, calendar
                .getActualMaximum(Calendar.DAY_OF_MONTH));
        return toString(calendar.getTime(), YYYYMMDD);
    }

    /**
     *
     * @param year
     *            int 年份
     * @param month
     *            int 月份
     *
     * @return int 某年某月的最后一天
     */
    public static String getLastDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month);
        cal.set(Calendar.DATE, 0);
        return toString(cal.getTime(),YYYYMMDD);
    }

    /**
     * 获取当前的日期
     * @return
     */
    public static String getNowDate(String pattern){
        if(StringUtils.isBlank(pattern)){
            return "";
        }
        Date dt = DateHelper.getSystemDate();
        SimpleDateFormat sdf = new SimpleDateFormat(pattern,Locale.CHINA);
        return  sdf.format(dt);
    }

    public static Date clearHourMiniuteSecondZero(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    // 获取当前时间所在周的开始日期
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); 
        return c.getTime();
    }

  //取得当前时间的,按照num数的结束时间
 public static Date getLastDayOfWeek(Date date,int num) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + num); 
        return c.getTime();
    }
    /**
     * 得到某年某周的第一天
     *
     * @param year
     * @param week
     * @return
     */
    public static Date getFirstDayOfWeek(int year,int month, int week) {
        int tmpWeek = week-1;
        int tmpMonth = month -1;
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, tmpMonth);
        calendar.set(Calendar.DATE, 1);

        Calendar cal = (Calendar) calendar.clone();
        cal.add(Calendar.DATE, tmpWeek * 7);

        return getFirstDayOfWeek(cal.getTime());
    }
    /**
     * 得到某年某周的最后一天
     *
     * @param year
     * @param month
     * @param week
     * @return
     */
    public static Date getLastDayOfWeek(int year,int month, int week,int num) {
        int tmpWeek = week-1;
        int tmpMonth = month -1;
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH,tmpMonth);
        calendar.set(Calendar.DATE, 1);
        Calendar cal = (Calendar) calendar.clone();
        cal.add(Calendar.DATE, tmpWeek * 7);
        return getLastDayOfWeek(cal.getTime(),num);
    }
}

猜你喜欢

转载自blog.csdn.net/sonlife/article/details/51315519