Java 日期工具类

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class DateUtil {


    /**
     * 获取当前时间 传入所需的时间格式时间
     * :格式: yyyyMMdd or yyyy-MM-dd yyyyMMddHHmmssSSS 或者yyyyMMdd 或者yyyyMMddHHmmss等
     * @param geshi
     * @return
     */
    public static String getCurrentDate(String geshi) {
        SimpleDateFormat bartDateFormat = new SimpleDateFormat(geshi);
        GregorianCalendar calendar = new GregorianCalendar();
        return bartDateFormat.format(calendar.getTime());
    }


    /**
     * 获取当前时间字符串,格式为yyyyMMddHHmmssSSS
     * @return
     */
    public static String getCurrentDate1() {
        return getCurrentDate("yyyyMMddHHmmssSSS");
    }


    /**
     * 根据所要的数据格式 和 对日期如 年 或 年月 的前几天或者 后几天
     * @param geshi 所需要的时间格式 (yyyyMMdd, yyyy-MM-dd ,yyyyMM or yyyy ....)
     * @param timeType 所需要时间 (YEAR :1, MONTH:2 ,DAY_OF_MONTH:5,DAY_OF_WEEK:7)
     * @param num 整数
     * @return
     */
    public static String getCurrentDate(String geshi, int timeType, int num) {
        SimpleDateFormat bartDateFormat = new SimpleDateFormat(geshi);
        Calendar calendar = Calendar.getInstance();
        // Log.debug(calendar.YEAR);
        calendar.add(timeType, num);
        return bartDateFormat.format(calendar.getTime());
    }


    /**
     * 比较两个timestamp类型的日期,格式:yyyy-mm-dd hh:mm:ss
     * @param val1
     * @param val2
     * @return
     */
    public static int compareTo(String val1, String val2) {
        String format = "yyyy-mm-dd hh:mm:ss";
        return compareTo(val1, val2, format);
    }


    /**
     * 比较两个日期,
     * @param val1
     * @param val2
     * @param format 格式如:yyyy-mm-dd hh:mm:ss,yyyymmdd,yyyymmddhhmmssSSS....
     * @return
     */
    public static int compareTo(String val1, String val2, String format) {
        SimpleDateFormat TimestampDF = new SimpleDateFormat(format);
        Calendar calendar1 = Calendar.getInstance();
        Calendar calendar2 = Calendar.getInstance();
        try {
            Date date1 = TimestampDF.parse(val1);
            calendar1.setTime(date1);
            Date date2 = TimestampDF.parse(val2);
            calendar2.setTime(date2);
        } catch (Exception e) {


        }


        return calendar1.compareTo(calendar2);
    }


    /**
     * 日期时间加减
     * @param dateTime 日期
     * @param formatStr 日期格式:yyyyMMddHHmmssSSS 或者yyyyMMdd 或者yyyyMMddHHmmss等
     * @param timeType Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND
     * @param timeType 所需要时间 (YEAR :1, MONTH:2 ,DAY_OF_MONTH:5,DAY_OF_WEEK:7)
     * @param amount 要加减的值,加为正,减为负
     * @return 对应部分加减后的字符串,格式对应 传入dateTime的格式  
     */
    public static String dateTimeAdd(String dateTime, String formatStr, int timeType, int amount) {
        try {
            SimpleDateFormat bartDateFormat = new SimpleDateFormat(formatStr);
            Date date = bartDateFormat.parse(dateTime);
            GregorianCalendar calendar = new GregorianCalendar();
            calendar.setTime(date);
            calendar.add(timeType, amount);
            return bartDateFormat.format(calendar.getTime());
        } catch (Exception e) {
            return formatStr;
        }
    }


    /**
     * 根据传入的日期计算出指定日期
     * 
     * @param date
     * @param formatStr
     * @param timeType
     * @param amount
     * @return
     */
    public static String dateTimeAdd(Date date, String formatStr, int timeType, int amount) {
        try {
            SimpleDateFormat bartDateFormat = new SimpleDateFormat(formatStr);
            //            Date date = bartDateFormat.parse(dateTime);
            GregorianCalendar calendar = new GregorianCalendar();
            calendar.setTime(date);
            calendar.add(timeType, amount);
            return bartDateFormat.format(calendar.getTime());
        } catch (Exception e) {
            return formatStr;
        }
    }


    /**
     * 增加天数
     * 
     * @param date
     * @param amount
     * @return
     */
    public static Date dayAdd(Date date, int amount) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, amount);
        return calendar.getTime();
    }


    /**
     * 计算日期相差天数
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static int differDay(Date date1, Date date2) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        try {
            date1 = sdf.parse(sdf.format(date1));
            date2 = sdf.parse(sdf.format(date2));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(date1);
        long time1 = cal.getTimeInMillis();
        cal.setTime(date2);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));


    }


    /**
     * 日期减法
     * @param dateStr1 时间1字符串
     * @param dateStr2 时间2字符串
     * @param formatStr 时间1及时间2的格式
     * @return dateStr1-dateStr2的间隔秒数
     */
    public static BigDecimal dateSubtract(String dateStr1, String dateStr2, String formatStr) {
        SimpleDateFormat df = new SimpleDateFormat(formatStr);
        try {
            java.util.Date d1 = df.parse(dateStr1);
            java.util.Date d2 = df.parse(dateStr2);
            //1小时=60分钟=3600秒=3600000
            double mins = 1000L;
            //long day= 24L * 60L * 60L * 1000L;计算天数之差
            BigDecimal bf = new BigDecimal((d1.getTime() - d2.getTime()) / mins);
            return bf.setScale(0, BigDecimal.ROUND_HALF_UP);
        } catch (Exception e) {
            //Log.error(e.toString());
            return new BigDecimal(0);
        }
    }


    /**
     * 字符串日期转timestamp
     * @param dt格式必须为:yyyy-MM-dd HH:mm:ss.SSS或者yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static long String2Timestamp(String dt) {
        try {
            // Timestamp ts = new Timestamp(System.currentTimeMillis());  
            Timestamp ts = Timestamp.valueOf(dt);
            return ts.getTime();
        } catch (Exception e) {
            e.printStackTrace();
            return 0L;
        }
    }


    /**
     * timestamp转字符串日期
     * @param geshi 日期格式,如: yyyyMMdd or yyyy-MM-dd
     * @param timestamp
     * @return
     */
    public static String timestamp2String(long timestamp, String geshi) {
        SimpleDateFormat sdf = new SimpleDateFormat(geshi);
        return sdf.format(Long.valueOf(timestamp));
    }


    /**
     * 把字段串形的日期去掉分隔符返回
     * @param date (2005-08-23)
     * @return  (20050823)
     */
    public static String stringDateDeleteSign(String date) {
        if (date == null || date.trim().length() < 10)
            return date;
        String rDate = date.substring(0, 4) + date.substring(5, 7) + date.substring(8, 10);
        return rDate;
    }


    /**
     * 把字段串形的日期加上分隔符返回
     * @param date (20050823)
     * @return  (2005-08-23)
     */
    public static String stringDateAddSign(String date) {
        if (date == null || date.trim().length() < 8)
            return date;
        String rDate = String.format("%s-%s-%s", date.substring(0, 4), date.substring(4, 6),
            date.substring(6, 8));
        return rDate;
    }


    /**
     * 把字段串形的日期时间加上分隔符返回
     * @param date (20050823154123456)
     * @return  (2005-08-23 15:41:23:456)
     */
    public static String stringDateTimeAddSign(String date) {
        if (date == null || date.trim().length() < 4)
            return date;
        String rDate = date.substring(0, 4) + "-" + date.substring(4, 6);
        if (date.trim().length() > 6)
            rDate += "-" + date.substring(6, 8);
        if (date.trim().length() > 8)
            rDate += " " + date.substring(8, 10);
        if (date.trim().length() > 10)
            rDate += ":" + date.substring(10, 12);
        if (date.trim().length() > 12)
            rDate += ":" + date.substring(12, 14);
        if (date.trim().length() > 14)
            rDate += ":" + date.substring(14, 17);
        return rDate;
    }


    public static String formatTime(String time) {
        if (time == null || time.trim().length() < 3)
            return time;
        if (time.trim().length() == 3) {
            return time.substring(0, 1) + ":" + time.substring(1);
        }
        if (time.trim().length() == 4) {
            return time.substring(0, 2) + ":" + time.substring(2);
        }
        return time;
    }


    /**
     * 日期/时间,转换为时间戳
     * @param datetime
     * @param format 格式
     * @return
     */
    public static Long string2Timestamp(String datetime, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat();
            sdf.applyPattern(format);
            Date date = sdf.parse(datetime);
            return Long.valueOf(date.getTime());
        } catch (ParseException pe) {
            return Long.valueOf(0);
        }
    }


    /**
     * 取本周7天的第一天(周一的日期)
     * @param formatStr 返回的日期格式
     * @return
     */
    public static String getNowWeekBegin(String formatStr) {
        Calendar cd = Calendar.getInstance();
        // 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
        int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1
        if (dayOfWeek == 0) {
            dayOfWeek = 7;
        }
        int mondayPlus = 1 - dayOfWeek;


        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus);


        SimpleDateFormat bartDateFormat = new SimpleDateFormat(formatStr);
        return bartDateFormat.format(currentDate.getTime());


    }


    /**
     * 字符串转日期
     * 
     * @param strDate
     * @return
     */
    public static Date convertString2Date(Object strDate) {
        SimpleDateFormat sdf = null;
        Date date = null;
        String tmpValue = String.valueOf(strDate);
        if (null == tmpValue)
            return date;


        if (tmpValue.matches("[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}")) {


            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");


        } else if (tmpValue
            .matches("[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}")) {


            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


        } else if (tmpValue.matches("[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}")) {


            sdf = new SimpleDateFormat("yyyy-MM-dd");


        } else if (tmpValue.matches("[0-9]{2,4}[0-9]{1,2}[0-9]{1,2}")) {


            sdf = new SimpleDateFormat("yyyyMMdd");
        } else if (tmpValue.matches("[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}")) {


            sdf = new SimpleDateFormat("HH:mm:ss");


        } else if (tmpValue
            .matches("[0-9]{2,4}[0-9]{1,2}[0-9]{1,2}[0-9]{1,2}[0-9]{1,2}[0-9]{1,2}")) {
            sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        } else if (tmpValue.matches("[0-9]{2,4}/[0-9]{1,2}/[0-9]{1,2}")) {
            sdf = new SimpleDateFormat("yyyy/MM/dd");
        }
        if (sdf == null)
            return null;
        try {
            date = sdf.parse(tmpValue);
        } catch (ParseException e) {


        }
        return date;
    }


    /**
     * 时间戳转成日期字符串
     * 
     * @param timeMillis
     * @param formatStr
     * @return
     */
    public static String refFormatNowDate(Long timeMillis, String formatStr) {
        Date nowTime = new Date(timeMillis);
        SimpleDateFormat sdFormatter = new SimpleDateFormat(formatStr);
        String retStrFormatNowDate = sdFormatter.format(nowTime);
        return retStrFormatNowDate;
    }


    /**
     * 将日期类转化成字符串
     * 
     * @param date      日期
     * @param dateStyle      转换的格式  yyyyMMdd,  yyyy/MM/dd ....
     * 
     * @return 转换后的字符串 
     * @throws Exception 
     */
    public static String dateToString(Date date, String dateStyle) {
        SimpleDateFormat format = null;
        String dateStr = "";
        try {
            format = new SimpleDateFormat(dateStyle);
            dateStr = format.format(date);
        } catch (Exception ex) {
            ex.printStackTrace();
        }


        return dateStr;
    }


    /**
     * 取指定时间所在月份最后一天
     * 
     * @param dateStyle
     * @return
     */
    public static String getMonthLastDay(Date date, String dateStyle) {
        SimpleDateFormat format = new SimpleDateFormat(dateStyle);
        Calendar ca = Calendar.getInstance();
        ca.setTime(date);
        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
        return format.format(ca.getTime());


    }
    
    /**
     * 截取日
     * 20150615
     * @param date
     * @return 15
     */
    public static Integer getDay(Integer date) {
        return new Integer(date.toString().substring(6));
    }
    
    /**
     * 截取月
     * @param date
     * @param date null:当前月份  其他:传入日期月份
     * @return
     */
    public static Integer getMonth(Integer date) {
        if(null == date){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
            return Integer.parseInt(sdf.format(new Date()));
        }
        return new Integer(date.toString().substring(0,6));
    }
    
    


    public static void main(String[] args) throws ParseException {
        //System.out.print(convertTimeToFormat( System.currentTimeMillis()-1000*60*60*24));
        //System.out.println(getMonth(20170412));
        System.out.println(getMonthLastDay(convertString2Date("20170201"),"yyyyMMdd"));
        System.out.println(dateTimeAdd("20170401","yyyyMMdd",2,1));


    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值