栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java时间日期工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java时间日期工具类

 转载请标明出处:
java时间日期工具类_付付讶的博客-CSDN博客

本文出自付付讶的博客   

package com.wyzz.model.common.utils;


import com.wyzz.model.constant.PayConstants;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDateTime;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.time.Instant;


public class DateUtils {
    public static final String DEFAULT_FORMAT_DATETIME="yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_FORMAT_Hour="yyyy-MM-dd HH";
    public static final String DEFAULT_FORMAT_DATE="yyyy-MM-dd";
    public static final String DEFAULT_FORMAT_TIME="HH:mm:ss";
	
    private static final List FORMATLIST = new ArrayList(4);

    static {
        FORMATLIST.add("yyyy-MM");
        FORMATLIST.add("yyyy-MM-dd");
        FORMATLIST.add("yyyy-MM-dd hh:mm");
        FORMATLIST.add("yyyy-MM-dd hh:mm:ss");
    }
	
	 
    static final long ONE_SECOND = 1000L;
    
    static final long MINUTES_CONSTANT = 60L;
	
	//日期格式
    private static SimpleDateFormat year_format = new SimpleDateFormat("yyyy");

    public static SimpleDateFormat default_format = new SimpleDateFormat(
            "yyyy-MM-dd");

    public static SimpleDateFormat common_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static SimpleDateFormat time_format = new SimpleDateFormat(
            "yyyyMMddHHmmss");

    public static SimpleDateFormat times_format = new SimpleDateFormat(
            "yyyyMMddHHmmssSSS");

    protected static Log log = LogFactory.getLog(DateUtils.class);
	
	
	
	 
    public static Date formatDate(String dateStr, String format) {
        Date date = null;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            date = sdf.parse(dateStr);
        } catch (Exception e) {

        }
        return date;

    }

    
    public static String parseDate(Date date, String format) {
        String dateStr = null;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            dateStr = sdf.format(date);
        } catch (Exception e) {
            throw new RuntimeException("cant not format Date to String for date:"+date);
        }
        return dateStr;

    }
	
	
    public static long generateLongTime() {
        Date dt = new Date();
        return dt.getTime();
    }

    
    public static String nowTime() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return format.format(new Date());
    }

    
    public static String nowTimeMonth() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        return format.format(new Date());
    }

    
    public static String generateTime() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        return format.format(new Date());
    }

    
    public static String generateTimes() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        return format.format(new Date());
    }
	
	
    public static String getCurrentDate() {
        Calendar c = Calendar.getInstance();
        Date date = c.getTime();
        SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");
        return simple.format(date);
    }

    
    public static String getYesterdayDate(){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(new Date());
        calendar.add(calendar.DATE,-1);
        String date2= sdf.format(calendar.getTime());
        System.out.println(date2);
        return date2;
    }
	
	 
    public static Date getCurDate() {
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DAY_OF_YEAR, -1);
        return instance.getTime();
    }
	
	 
    public static int getCurrYear() {
        return new GregorianCalendar().get(Calendar.YEAR);
    }
	
	
    public static int getNextYear() {
        return new GregorianCalendar().get(Calendar.YEAR) + 1;
    }

    
    public static String generateDateTime(String formatStr) {
        SimpleDateFormat format = new SimpleDateFormat(formatStr);
        return format.format(new Date());
    }

     
    public static String generateDateTimeAddHour(int addHour,String formatstr){
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.HOUR_OF_DAY, addHour);
        SimpleDateFormat format = new SimpleDateFormat(formatstr);
        return format.format(cal.getTime());
    }
    
    public static String generateDateTime(Date date,String formatStr){
        SimpleDateFormat format = new SimpleDateFormat(formatStr);
        return format.format(date);
    }

    
    public static int getAgeByBirthday(String birthday,String formatter){
        return getAgeByBirthday(formatDate(birthday, formatter));
    }

    
    public static int getAgeByBirthday(Date birthday){
        int age=0;
        Calendar now=Calendar.getInstance();
        now.setTime(new Date());
        Calendar birth=Calendar.getInstance();
        birth.setTime(birthday);

        //如果生日比当前日期晚,就是0岁
        if(birth.after(now)){
            age=0;
        }else{
            age=now.get(Calendar.YEAR)-birth.get(Calendar.YEAR);//计算年份差,例如:2019-2018=1
            if(age!=0 && now.get(Calendar.DAY_OF_YEAR)<=birth.get(Calendar.DAY_OF_YEAR)){
                //如果当前日期早于出生日期,则年龄-1
                age-=1;
            }
        }
        return age;
    }
	
	
    public static List getMonthsByQuarter(int quarter){
        List months=new ArrayList<>();
        String year=String.valueOf(getCurrYear());
        switch(quarter){
            case 1:
                months.add(year+"-01");
                months.add(year+"-02");
                months.add(year+"-03");
                break;
            case 2:
                months.add(year+"-04");
                months.add(year+"-05");
                months.add(year+"-06");
                break;
            case 3:
                months.add(year+"-07");
                months.add(year+"-08");
                months.add(year+"-09");
                break;
            case 4:
                months.add(year+"-10");
                months.add(year+"-11");
                months.add(year+"-12");
                break;
        }
        return months;
    }
	
	 
    public static List getMonthsByQuarter(String year,int quarter){
        List months=new ArrayList<>();
        if(StringUtils.isEmpty(year)){
            return getMonthsByQuarter(quarter);
        }
        switch(quarter){
            case 1:
                months.add(year+"-01");
                months.add(year+"-02");
                months.add(year+"-03");
                break;
            case 2:
                months.add(year+"-04");
                months.add(year+"-05");
                months.add(year+"-06");
                break;
            case 3:
                months.add(year+"-07");
                months.add(year+"-08");
                months.add(year+"-09");
                break;
            case 4:
                months.add(year+"-10");
                months.add(year+"-11");
                months.add(year+"-12");
                break;
        }
        return months;
    }

    
    public static int parseQuarter(int month) {
        int quarter = 0;
        switch (month) {
            case 1:
            case 2:
            case 3:
                quarter = 1;
                break;
            case 4:
            case 5:
            case 6:
                quarter = 2;
                break;
            case 7:
            case 8:
            case 9:
                quarter = 3;
                break;
            case 10:
            case 11:
            case 12:
                quarter = 4;
                break;
            default:
                break;
        }
        return quarter;
    }
	
	
    public static int getMonthFromYear(String dateString) {
        Date date = string2Date(dateString);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }

    
    public static int getDaysOfMonth(String date,String format){
        Calendar ca=Calendar.getInstance();
        ca.setTime(formatDate(date,format));
        return ca.getActualMaximum(Calendar.DAY_OF_MONTH);
    }

    
    public static int getDayFromYear(String year) {
        Date date;
        int day = 0;
        try {
            date = year_format.parse(year);
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(date);
            day = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
        } catch (ParseException e) {

        }
        return day;
    }

    
    public static String getCurrYearFirstDay(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        return default_format.format(currYearFirst);
    }

    
    public static int getWeek(Date date) {

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int iDay = 0;
        if (c.get(Calendar.DAY_OF_WEEK) == 1) {
            iDay = 7;
        } else {
            iDay = c.get(Calendar.DAY_OF_WEEK) - 1;
        }
        return iDay;
    }

    
    public static int getWeek(String dateString) {
        Date date = string2Date(dateString);
        Calendar c = Calendar.getInstance();
        c.setTime(date);

        int iDay = 0;
        if (c.get(Calendar.DAY_OF_WEEK) == 1) {
            iDay = 7;
        } else {
            iDay = c.get(Calendar.DAY_OF_WEEK) - 1;
        }
        return iDay;
    }

    
    public static String getDateByAddDays(String inDate, int days, int _iType) {
        Date dateStr = string2Date(inDate);
        Date tempDate = getDateByAddDays(dateStr, days);
        return date2String(tempDate, _iType);
    }

    
    public static String date2String(Date date, int _iType) {
        String strTemp = time_format.format(date);
        SimpleDateFormat formatter = null;
        switch (_iType) {
            case 0: // yyyymmdd
                strTemp = strTemp.substring(0, 8);
                break;
            case 4:// yyyy
                strTemp = strTemp.substring(0, 4);
                break;
            case 6: // yymmdd
                strTemp = strTemp.substring(2, 8);
                break;
            case 8: // yyyymmdd
                strTemp = strTemp.substring(0, 8);
                break;
            case 14:
                // yyyyMMddHHmmss 格式
                break;
            case 10: // yyyy-mm-dd
                formatter = new SimpleDateFormat("yyyy-MM-dd");
                strTemp = formatter.format(date);
                break;
            case 19: // yyyy-mm-dd HH:mm:ss
                formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                strTemp = formatter.format(date);
                break;
            case -6: // HHmmss
                strTemp = strTemp.substring(8);
                break;
            case -8: // HH:mm:ss
                formatter = new SimpleDateFormat("HH:mm:ss");
                strTemp = formatter.format(date);
                break;
            default:
                break;
        }
        return strTemp;
    }
	
	
    public static String longDate2String(long lDate, int _iType) {

        Date date = new Date(lDate);
        String strTemp = time_format.format(date);
        SimpleDateFormat formatter = null;
        switch (_iType) {
            case 0: // yyyymmdd
                strTemp = strTemp.substring(0, 8);
                break;
            case 4:// yyyy
                strTemp = strTemp.substring(0, 4);
                break;
            case 6: // yymmdd
                strTemp = strTemp.substring(2, 8);
                break;
            case 8: // yyyymmdd
                strTemp = strTemp.substring(0, 8);
                break;
            case 10: // yyyy-mm-dd
                formatter = new SimpleDateFormat("yyyy-MM-dd");
                strTemp = formatter.format(date);
                break;
            case -6: // HHmmss
                strTemp = strTemp.substring(8);
                break;
            case -8: // HH:mm:ss
                formatter = new SimpleDateFormat("HH:mm:ss");
                strTemp = formatter.format(date);
                break;
            default:
                break;
        }
        return strTemp;
    }

    
    public static Date getDateByAddDays(Date inDate, int days) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inDate);
        calendar.add(Calendar.DATE, days);
        return calendar.getTime();
    }
	
	
    public static String getDateByAddDays(String formatStr, int days) {
        SimpleDateFormat format = new SimpleDateFormat(formatStr);
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, days);
        return format.format(calendar.getTime());
    }

    
    public static Date getDateByAddMinutes(Date inDate, int minutes) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inDate);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }


    
    public static Date getDateByAddMonth(Date inDate, int month) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inDate);
        calendar.add(Calendar.MONTH, month);
        return calendar.getTime();
    }

    
    public static String getCurrentByAddMonth(int month) {
        Date d = getDateByAddMonth(new Date(), month);

        return date2String(d, 14);
    }

    
    public static double getHourBetweenDates(Date beginDate, Date endDate) {

        long l1 = endDate.getTime();
        long l2 = beginDate.getTime();

        double cc = l1 - l2;
        return cc / (60 * 60 * 1000);
    }

    
    public static double getMinuteBetweenDates(Date beginDate, Date endDate) {

        double cc = endDate.getTime() - beginDate.getTime();
        return cc / (60 * 1000);
    }
	
	
    public static Long getDateBetween(Date date1, Date date2) {

        return Math.abs((date1.getTime() - date2.getTime()) / 1000);
    }
	
	
    public static int differentDays(Date date1,Date date2){
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
        int day1= cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);
        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        //不同一年
        if(year1 != year2){
            int timeDistance = 0 ;
            for(int i = year1 ; i < year2 ; i ++){
                //闰年
                if(i%4==0 && i%100!=0 || i%400==0){
                    timeDistance += 366;
                    //不是闰年
                } else{
                    timeDistance += 365;
                }
            }

            return timeDistance + (day2-day1) ;
            //同一年
        }else {
            return day2-day1;
        }
    }

    
    public static String getMonthEnglishName(String sMonth) {

        String[] arrMonth = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};

        int iMonth = 0;
        String sRet = "";
        try {
            iMonth = Integer.parseInt(sMonth);
            if (iMonth >= 1 && iMonth <= 12) {
                sRet = arrMonth[iMonth -1];
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return sRet;
    }

    
    @SuppressWarnings("unused")
    public static int compareDate(String date1, String date2, int stype) {
        int n = 0;

        String[] u = { "天", "月", "年" };
        String formatStyle = stype == 1 ? "yyyy-MM" : "yyyy-MM-dd";

        date2 = date2 == null ? DateUtils.getCurrentDate() : date2;

        DateFormat df = new SimpleDateFormat(formatStyle);
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        try {
            c1.setTime(df.parse(date1));
            c2.setTime(df.parse(date2));
        } catch (Exception e3) {
            e3.printStackTrace();
        }
        // List list = new ArrayList();
        while (!c1.after(c2)) { // 循环对比,直到相等,n 就是所要的结果
            // list.add(df.format(c1.getTime())); // 这里可以把间隔的日期存到数组中 打印出来
            n++;
            if (stype == 1) {
                c1.add(Calendar.MONTH, 1); // 比较月份,月份+1
            } else {
                c1.add(Calendar.DATE, 1); // 比较天数,日期+1
            }
        }

        n = n - 1;

        if (stype == 2) {
            n = (int) n / 365;
        }

        return n;
    }

    

    
    public static String  CalculateWeekDay(String date) {
        String[] str = date.split("-");
        int y = Integer.parseInt(str[0]);
        int m = 0;
        if(str[1].startsWith("0")){
            m = Integer.parseInt(str[1].substring(1));
        }else{
            m = Integer.parseInt(str[1]);
        }
        int d = Integer.parseInt(str[2]);
        if (m == 1 || m == 2) {
            m += 12;
            y--;
        }
        int iWeek = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
        switch (iWeek) {
            case 0:
                return "星期一";
            case 1:
                return "星期二";
            case 2:
                return "星期三";
            case 3:
                return "星期四";
            case 4:
                return "星期五";
            case 5:
                return "星期六";
            case 6:
                return "星期日";
        }
        return "";
    }


    
    public static String[] getWeekRange(){
        LocalDate today = LocalDate.now();
        DayOfWeek week = today.getDayOfWeek();
        int dayValue = week.getValue();
        String weekStart = today.minusDays(dayValue - 1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        String weekEnd = today.plusDays(7 - dayValue).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        return new String[]{weekStart,weekEnd};
    }
	
	 
    public static Date[] getWeekRangeDate()  {
        // 当前时间
        LocalDateTime now = LocalDateTime.now();
        // 本周开始时间
        Date startTimeInWeek = now.withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).withDayOfWeek(DateTimeConstants.MONDAY).toDate();
        // 本周结束时间
        Date endTimeInWeek = now.withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59).withDayOfWeek(DateTimeConstants.SUNDAY).toDate();
        return new Date[]{startTimeInWeek,endTimeInWeek};
    }

    
    public static String[] getWorkRange(){
        LocalDate today = LocalDate.now();
        DayOfWeek week = today.getDayOfWeek();
        int dayValue = week.getValue();
        String weekStart = today.minusDays(dayValue - 1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        String weekEnd = today.plusDays(5 - dayValue).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        return new String[]{weekStart,weekEnd};
    }

   
    
    public static String[] getMonthRange(String month){
        //获取本月第一天和最后一天日期
        DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate firstDay = LocalDate.parse(month,format).with(TemporalAdjusters.firstDayOfMonth());
        LocalDate lastDay = LocalDate.parse(month,format).with(TemporalAdjusters.lastDayOfMonth());
        return new String[]{firstDay.format(format),lastDay.format(format)};
    }
    
    public static String[] getQuarterRange(){
        List months=getMonthsByQuarter(parseQuarter(Integer.valueOf(generateDateTime("MM"))));
        //获取本月第一天和最后一天日期
        DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String lastDay = getMonthRange(months.get(2)+"-01")[1];
        return new String[]{months.get(0)+"-01",lastDay};
    }

    
    public static Date getDayStartTime(Date d) {
        Calendar calendar = Calendar.getInstance();
        if(null != d) {calendar.setTime(d);}
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }
    
    public static Date getDayEndTime(Date d) {
        Calendar calendar = Calendar.getInstance();
        if(null != d) {calendar.setTime(d);}
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    
    public static Date[] getMonthRangeDate()  {
        LocalDate today = LocalDate.now();
        //本月的第一天
        LocalDate firstDay = LocalDate.of(today.getYear(), today.getMonth(), 1);
        Date startTimeInMonth = Date.from(firstDay.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
        //本月的最后一天
        LocalDate lastDay = today.with(TemporalAdjusters.lastDayOfMonth());
        Date endTimeInMonth = Date.from(lastDay.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
        return new Date[]{getDayStartTime(startTimeInMonth),getDayEndTime(endTimeInMonth)};
    }
	
	 
    public static String[] getMonthRange(){
        //获取本月第一天和最后一天日期
        return getMonthRange(generateDateTime("yyyy-MM-dd"));
    }
	
    
    public static Date[] getBeforeMonthRangeDate()  {
        LocalDate today = LocalDate.now().plusMonths(-1);
        //本月的第一天
        LocalDate firstDay = LocalDate.of(today.getYear(), today.getMonth(), 1);
        Date startTimeInMonth = Date.from(firstDay.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
        //本月的最后一天
        LocalDate lastDay = today.with(TemporalAdjusters.lastDayOfMonth());
        Date endTimeInMonth = Date.from(lastDay.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
        return new Date[]{getDayStartTime(startTimeInMonth),getDayEndTime(endTimeInMonth)};
    }

    
    public static long getSecondByEndToday() {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR,1);
        calendar.set(Calendar.HOUR_OF_DAY,0);
        calendar.set(Calendar.SECOND,0);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.MILLISECOND,0);
        return ((calendar.getTimeInMillis()-System.currentTimeMillis()) / 1000) ;
    }

    
    public static long getSecondByMonthEndDay() {
        Date date = getMonthRangeDate()[1];
        return ((date.getTime()-System.currentTimeMillis()) / 1000) ;
    }
	
	
	
	
    public static int toSecs(long timeInMillis) {
        return (int) Math.ceil((double) timeInMillis / ONE_SECOND);
    }

    
    public static int toMinutes(long timeInMillis) {
        return (int) Math.ceil((double) timeInMillis / ONE_SECOND / MINUTES_CONSTANT);
    }

    
    public static long toMillis(int timeInSecs) {
        return timeInSecs * ONE_SECOND;
    }

    
    public static int convertTimeToInt(long seconds) {
        if (seconds > Integer.MAX_VALUE) {
            return Integer.MAX_VALUE;
        } else {
            return (int) seconds;
        }
    }

    
    public static int currentSecond() {
        return toSecs(System.currentTimeMillis());
    }

    
    public static int currentSecond(boolean isDay) {
        if (isDay) {
            return currentSecond();
        }
        Date current = new Date();
        current = new Date(current.getYear(), current.getMonth(), current.getDate());
        return toSecs(current.getTime());
    }
	
	
    public static boolean isToday(Integer second) {
        //获取当前日期
        LocalDate now = LocalDate.now();
        //获取传入毫秒日期
        Instant instant = Instant.ofEpochSecond(second);
        LocalDate localDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();
        return now.equals(localDate);
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/915561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号