日期工具类

package com.hqsf.hqsfapp.pos.front.utils;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;

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

/**
 * 日期工具类
 *
 */
public class DateUtils {
    /**
     * 某一个月第一天和最后一天
     * @param date
     * @return
     */
    public static Map<String, String> getFirstday_Lastday_Month(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // calendar.add(Calendar.MONTH, -1);上个月
        Date theDate = calendar.getTime();

        // 第一天
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first).append(" 00:00:00");
        day_first = str.toString();

        // 最后一天
        calendar.add(Calendar.MONTH, 1); // 加一个月
        calendar.set(Calendar.DATE, 1); // 设置为该月第一天
        calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
        String day_last = df.format(calendar.getTime());
        StringBuffer endStr = new StringBuffer().append(day_last).append(" 23:59:59");
        day_last = endStr.toString();

        Map<String, String> map = new HashMap<String, String>();
        map.put("first", day_first);
        map.put("last", day_last);
        return map;
    }

    /**
     * 月最后一天
     * @param year_month yyyy-MM
     * @return
     */
    public static Date getLastDayOfBillDate(String year_month) {
        try {
            Map<String, String> firstday_Lastday_Month = DateUtils.getFirstday_Lastday_Month(new SimpleDateFormat(
                    "yyyy-MM").parse(year_month));
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(firstday_Lastday_Month.get("last"));
        } catch (ParseException e) {
            throw new RuntimeException("年月格式不正确");
        }
    }

    /**
     * 月第一天
     * @param year_month yyyy-MM
     * @return
     */
    public static Date getFirstDayOfBillDate(String year_month) {
        try {
            Map<String, String> firstday_Lastday_Month = DateUtils.getFirstday_Lastday_Month(new SimpleDateFormat(
                    "yyyy-MM").parse(year_month));
            return new SimpleDateFormat("yyyy-MM-dd").parse(firstday_Lastday_Month.get("first"));
        } catch (ParseException e) {
            throw new RuntimeException("年月格式不正确");
        }
    }

    /**
     * 上个月
     * @param year_month yyyy-MM
     * @return
     */
    public static String getUpYearMonth(String year_month) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(sdf.parse(year_month));
            calendar.add(Calendar.MONTH, -1);
            String upYearMonth = sdf.format(calendar.getTime());
            return upYearMonth;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 前一天
     * @param date
     * @return
     */
    public static Date getYesterday(Date date) {
        Date dBefore = new Date();
        Calendar calendar = Calendar.getInstance(); //得到日历
        calendar.setTime(date);//把当前时间赋给日历
        calendar.add(Calendar.DAY_OF_MONTH, -1);  //设置为前一天
        dBefore = calendar.getTime();   //得到前一天的时间
        return dBefore;
    }

    /***
     * 日期字符串转为日期
     * @param dateStr 格式yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static Date getDateByString(String dateStr){
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr);
        } catch (ParseException e) {
            return null;
        }
    }

    /***
     * 日期字符串转为日期
     * @param dateStr 格式yyyy-MM-dd
     * @return
     */
    public static Date getShortDateByString(String dateStr){
        try {
            return new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
        } catch (ParseException e) {
            return null;
        }
    }

    /**
     * 某个月的天数
     * @param yearMonth
     * @return
     */
    public static int getDayNumOfMonth(String yearMonth){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar calendar = new GregorianCalendar();
        Date date1;
        try {
            date1 = sdf.parse(yearMonth);
        } catch (ParseException e) {
            return -1;
        }
        calendar.setTime(date1); //放入你的日期
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    }

    /**
     * 当月第一天和当月的最后一天
     * @return
     */
    public static Map<String, Object> getFirstDateAndLastDate() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.DAY_OF_MONTH,1);
        startCalendar.set(Calendar.HOUR_OF_DAY, 0);
        startCalendar.set(Calendar.MINUTE, 0);
        startCalendar.set(Calendar.SECOND, 0);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        endCalendar.set(Calendar.HOUR_OF_DAY, 23);
        endCalendar.set(Calendar.MINUTE, 59);
        endCalendar.set(Calendar.SECOND, 59);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("firstDate", startCalendar.getTime());
        map.put("nowDate", endCalendar.getTime());
        return map;
    }

    /**
     * 上个月第一天和最后一天
     * @return
     */
    public static Map<String, Object> getUpMonFirstDateAndLastDate() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.add(Calendar.MONTH, -1); // 上一个月
        startCalendar.set(Calendar.DAY_OF_MONTH,1);
        startCalendar.set(Calendar.HOUR_OF_DAY, 0);
        startCalendar.set(Calendar.MINUTE, 0);
        startCalendar.set(Calendar.SECOND, 0);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.DATE, 1); // 设置为该月第一天
        endCalendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
        endCalendar.set(Calendar.HOUR_OF_DAY, 23);
        endCalendar.set(Calendar.MINUTE, 59);
        endCalendar.set(Calendar.SECOND, 59);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("upDate", startCalendar.getTime());
        map.put("upLastDate", endCalendar.getTime());
        return map;
    }

    /**
     * 日期转为日期字符串
     * @param
     * @return
     */
    public static String getDateByString(Date date){
        return new SimpleDateFormat("yyyy-MM-dd").format(date);
    }

    /**
     * 日期转为日期字符串:yyyy-MM-dd 00:00:00
     */
    public static String getLongStartTimeByString(Date date){
        return getDateByString(date) + " 00:00:00";
    }

    /**
     * 日期转为日期字符串:yyyy-MM-dd 23:59:59
     */
    public static String getLongEndTimeByString(Date date){
        return getDateByString(date) + " 23:59:59";
    }

    /**
     * 日期转为日期字符串
     * @param
     * @return
     */
    public static String getLongDateByString(Date date){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    }



    /**
     * 月的第一天
     */
    public static String getFirstDay(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // calendar.add(Calendar.MONTH, -1);上个月
        Date theDate = calendar.getTime();
        // 第一天
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        return day_first;
    }

    /**
     * 日期相差天数
     */
    public static int daysBetween(String startDate, String endDate) {
        try {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(startDate));
            long time1 = cal.getTimeInMillis();
            cal.setTime(sdf.parse(endDate));
            long time2 = cal.getTimeInMillis();
            long between_days=(time2-time1)/(1000*3600*24);
            return Integer.parseInt(String.valueOf(between_days));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 返回当前日期 date 格式
     */
    public static Date getCurrentDate() {
        return new Date();
    }

    /**
     * 返回String类型当前日期, 按format格式
     */
    public static String getCurrentDate(String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(new Date());
    }

    public static Date getDateByFormat(String dateStr, String format) {
        if (StringUtils.isBlank(dateStr) || StringUtils.isBlank(format)) {
            return null;
        }
        Date date = null;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取本周的周一
     * @return
     */
    public static String getWeekStart() {
        return DateTime.now().dayOfWeek().withMinimumValue().toString("yyyy-MM-dd");
    }

    /**
     * 获取本周的周末
     * @return
     */
    public static String getWeekEnd(){
        return DateTime.now().dayOfWeek().withMaximumValue().toString("yyyy-MM-dd");
    }


    /**
     * 获取当月的第一天
     * @return
     */
    public static String getMonthStart() {

        return DateTime.now().dayOfMonth().withMinimumValue().toString("yyyy-MM-dd");
    }

    /**
     * 获取当月的最后一天
     * @return
     */
    public static String getMonthEnd() {
        return DateTime.now().dayOfMonth().withMaximumValue().toString("yyyy-MM-dd");
    }

    /**
     * 运算当前日期减去多少天
     * @param date
     * @param day
     * @return
     */
    public static Date getSubDayOfMonth(Date date, int day) {
        DateTime d = new DateTime(date);
        d = d.minusDays(day);
        return d.toDate();
    }



    /**
     * 格式化日期的时间部分为 00:00:00
     * @param subDayOfMonth
     * @return
     */
    public static Date getStartDate(Date subDayOfMonth) {
        DateTime dateTime = new DateTime(subDayOfMonth);
        dateTime = dateTime.withHourOfDay(00).withMinuteOfHour(00).withSecondOfMinute(00);
        return dateTime.toDate();
    }

    public static Date getEndDate(Date date) {
        DateTime dateTime = new DateTime(date);
        dateTime = dateTime.withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59);
        return dateTime.toDate();
    }

    /**
     * 日期格式化
     * @param date
     * @param formatStyle
     * @return
     */
    public static String formatDateToStr(Date date,String formatStyle) {
        DateTime dateTime = new DateTime(date);
        return dateTime.toString(formatStyle);
    }

    /**
     * 格式化 当前日期算起X天的 00:00:00     * @param date
     * @param datetimestyle
     * @return
     */
    public static String getDayBeforeXStart(Date date,int day, String datetimestyle) {
        return formatDateToStr(getStartDate(DateUtils.getSubDayOfMonth(date,day)),datetimestyle);
    }

    public static void main(String[] args) {
        Date d = getSubDayOfMonth(new Date(),9);
        DateTime d2 = new DateTime(d);
        d = getEndDate(d2.toDate());
        System.out.println(d.toLocaleString());
    }

    /**
     * 格式化当前日期算起的X天前的 23:59:59
     * @param date
     * @param day
     * @param datetimestyle
     * @return
     */
    public static String getDayBeforeXEnd(Date date, int day, String datetimestyle) {
        return formatDateToStr(getStartDate(DateUtils.getSubDayOfMonth(date,day)),datetimestyle);
    }

    /**
     * 格式化指定日期的 23:59:59
     * @param date
     * @param datetimestyle
     * @return
     */
    public static String getDayBeforeXEnd(Date date,String datetimestyle) {
        return formatDateToStr(getEndDate(new Date()),datetimestyle);
    }

    /**
     * 获得本周一0点时间
     *
     * @return
     */
    public static Date getTimesWeekmorning() {
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return cal.getTime();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值