导航

java 的Date 日期相关操作

Posted on 2018-04-22 16:01  水狼渊  阅读(208)  评论(0)    收藏  举报
  1. String 与 Date互转
    (1)基于SimpleDateFormat实现:
    package com.bky.df;
    
    import java.text.ParseException;
    import java.text.ParsePosition;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class DateLangUtils{
        public static void main(String[] args) throws ParseException {
           Date nowDate = new Date();
           String formatString = "yyyy-MM-dd HH:mm:ss";
           String dateString = "2018-12-02 16:33:15";
           System.out.println(getString(nowDate, formatString));
           System.out.println(getDate(dateString, formatString));
           System.out.println(getDatePos(dateString, formatString));
        }
    
        /**
         * 使用SimpleDateFormat格式化Date
         * 
         * @param date
         * @param formatString
         * @return
         */
        public static String getString(Date date, String formatString) {
            SimpleDateFormat formatter = new SimpleDateFormat(formatString);
            return formatter.format(date);
        }
        
        /**
         * 使用SimpleDateFormat解析日期字符串
         * 
         * @param dateString
         * @param formatString
         * @return
         * @throws ParseException
         */
        public static Date getDate(String dateString, String formatString) throws ParseException {
            SimpleDateFormat formatter = new SimpleDateFormat(formatString);
            return formatter.parse(dateString);
        }
    
        /**
         * 使用SimpleDateFormat解析日期字符串
         * 
         * @param dateString
         * @param formatString
         * @return
         */
        public static Date getDatePos(String dateString, String formatString) {
            SimpleDateFormat formatter = new SimpleDateFormat(formatString);
            return formatter.parse(dateString, new ParsePosition(0));
        }
    }

    (2)使用commons组件实现

    import java.text.ParseException;
    import java.util.Date;
    
    import org.apache.commons.lang3.time.DateFormatUtils;
    import org.apache.commons.lang3.time.DateUtils;
    
    public static void main(String[] args) throws ParseException {
        Date nowDate = new Date();
        String formatString = "yyyy-MM-dd HH:mm:ss";
        String dateString = "2018-12-02 16:33:15";
        System.out.println(DateFormatUtils.format(nowDate, formatString));
        System.out.println(DateUtils.parseDate(dateString, formatString));
    }
  2. 对日期的相关操作
    基于Calendar实现
    Calendar cal = Calendar.getInstance();
    // 设置Calendar时间(1.Date 2.longofmills)
    cal.setTime(new Date());
    cal.setTimeInMillis(System.currentTimeMillis());
    
    // 设置年月日,时分秒,毫秒
    cal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
    // Calendar.MONTH 从0开始表示1月,需要转换展示/设置
    cal.set(Calendar.MONTH, cal.get(Calendar.MONTH));
    cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
    // 24小时制
    cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
    // 12小时制
    cal.set(Calendar.HOUR, cal.get(Calendar.HOUR));
    cal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
    cal.set(Calendar.SECOND, cal.get(Calendar.SECOND));
    cal.set(Calendar.MILLISECOND, cal.get(Calendar.MILLISECOND));
    
    // 设置与星期相关参数
    // 设置当周星期周几(1为星期日,7为星期六)
    cal.set(Calendar.DAY_OF_WEEK, cal.get(Calendar.DAY_OF_WEEK));
    // 设置当月第几个星期(默认地区是从星期日开始算,以日历计算第几周)
    cal.set(Calendar.WEEK_OF_MONTH, cal.get(Calendar.WEEK_OF_MONTH));
    // 设置当月第几个星期(设置按当月的天数算第几周,7天一周)
    cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
    // 设置一年中第几个星期
    cal.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR));
    
    // 设置当月第一天
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    
    // 设置当月最后一天
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

     

  3. 计算两个时间之差
        /**
         * 根据需要计算并格式化两个时间之差
         * 
         * @param beforeDate
         * @param afterDate
         * @param formatPatterns(长度一定要为6,如果不需要则传null)
         *            eg:new String[]{ "年", null, "天", "时", "分", "秒" }
         * @return
         */
        public static String formatDistanceDate(Date beforeDate, Date afterDate, String[] formatPatterns) {
            if (formatPatterns == null || formatPatterns.length < 6)
                return "";
            long instance = (afterDate.getTime() - beforeDate.getTime()) / 1000;
            StringBuilder dateInstanceFormatBuffer = new StringBuilder();
            if (formatPatterns[0] != null) {
                long year = instance / (3600l * 24 * 365);
                if (year > 0) {
                    dateInstanceFormatBuffer.append(year);
                    dateInstanceFormatBuffer.append(formatPatterns[0]);
                    instance = instance % (3600l * 24 * 365);
                }
            }
            if (formatPatterns[1] != null) {
                long month = instance / (3600l * 24 * 30);
                if (month > 0) {
                    instance = instance % (3600l * 24 * 30);
                    dateInstanceFormatBuffer.append(month);
                    dateInstanceFormatBuffer.append(formatPatterns[1]);
                }
            }
            if (formatPatterns[2] != null) {
                long day = instance / (3600l * 24);
                if (day > 0) {
                    instance = instance % (3600l * 24);
                    dateInstanceFormatBuffer.append(day);
                    dateInstanceFormatBuffer.append(formatPatterns[2]);
                }
            }
            if (formatPatterns[3] != null) {
                long hour = instance / 3600;
                if (hour > 0) {
                    instance = instance % 3600;
                    dateInstanceFormatBuffer.append(hour);
                    dateInstanceFormatBuffer.append(formatPatterns[3]);
                }
            }
            if (formatPatterns[4] != null) {
                long min = instance / 60;
                if (min > 0) {
                    dateInstanceFormatBuffer.append(min);
                    dateInstanceFormatBuffer.append(formatPatterns[4]);
                }
            }
            if (formatPatterns[5] != null) {
                long second = instance % 60;
                if (second > 0) {
                    dateInstanceFormatBuffer.append(second);
                    dateInstanceFormatBuffer.append(formatPatterns[5]);
                }
            }
            return dateInstanceFormatBuffer.toString();
        }