DateUtil



import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.commons.lang.StringUtils;

/**
 * 日期处理类
 * <p>
 * Title: 公共类
 * </p>
 * <p>
 * Description: 取日期信息,对指定的日期进行加减操作
 * </p>
 * <p>
 */
public class DateUtil {
    private static char DAY_DELIMITER = '-';
    public static int YEAR = Calendar.YEAR;
    public static int MONTH = Calendar.MONDAY;
    public static int DAY = Calendar.DAY_OF_MONTH;
    public static int HOUR = Calendar.HOUR_OF_DAY;
    public static int MINUTE = Calendar.MINUTE;
    public static int SECOND = Calendar.SECOND;

    public static String MONTH_FORMAT = "yyyy-MM";
    public static String DATE_FORMAT = "yyyy-MM-dd";
    public static String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static String DATETIME_LONG_FORMAT = "yyyyMMddHHmmss";
    public static String DATE_LONG_FORMAT = "yyyyMMdd";
    
    /**
     * 取得当前日期
     *
     * @return YYYY-MM-DD
     */
    public static String getDate() {
        return getDateTime().substring(0, 10);
    }

    /**
     * 取得当前时间
     *
     * @return HH:MM:SS
     */
    public static String getTime() {
        return getDateTime().substring(11, 19);
    }
    

    /**
     * 获取时间戳,格式为YYYYMMDDhhmmssmmm,如2009-01-22 17:23:45取值为20090122172345000
     *
     * @return
     */
    @SuppressWarnings("static-access")
    public static String getTimeStampStr() {
        Calendar calendar = new GregorianCalendar();
        StringBuilder buf = new StringBuilder("");
        buf.append(calendar.get(calendar.YEAR));
        buf.append(calendar.get(calendar.MONTH) + 1 > 9 ? calendar
                .get(calendar.MONTH)
                + 1 + "" : "0" + (calendar.get(calendar.MONTH) + 1));
        buf.append(calendar.get(calendar.DAY_OF_MONTH) > 9 ? calendar
                .get(calendar.DAY_OF_MONTH)
                + "" : "0" + calendar.get(calendar.DAY_OF_MONTH));
        buf.append(calendar.get(calendar.HOUR_OF_DAY) > 9 ? calendar
                .get(calendar.HOUR_OF_DAY)
                + "" : "0" + calendar.get(calendar.HOUR_OF_DAY));
        buf.append(calendar.get(calendar.MINUTE) > 9 ? calendar
                .get(calendar.MINUTE)
                + "" : "0" + calendar.get(calendar.MINUTE));
        buf.append(calendar.get(calendar.SECOND) > 9 ? calendar
                .get(calendar.SECOND)
                + "" : "0" + calendar.get(calendar.SECOND));
        return buf.toString();
    }

    /**
     * 取得当前的日期时间
     *
     * @return YYYY-MM-DD HH:MM:DD
     */
    public static String getDateTime() {
        return getDateTime(new GregorianCalendar());
    }

    /**
     * 根据日历返回日期时间
     *
     * @param calendar
     *            日历
     * @return YYYY-MM-DD HH:MM:DD
     */
    @SuppressWarnings("static-access")
    private static String getDateTime(Calendar calendar) {
        StringBuffer buf = new StringBuffer("");

        buf.append(calendar.get(calendar.YEAR));
        buf.append(DAY_DELIMITER);
        buf.append(calendar.get(calendar.MONTH) + 1 > 9 ? calendar
                .get(calendar.MONTH)
                + 1 + "" : "0" + (calendar.get(calendar.MONTH) + 1));
        buf.append(DAY_DELIMITER);
        buf.append(calendar.get(calendar.DAY_OF_MONTH) > 9 ? calendar
                .get(calendar.DAY_OF_MONTH)
                + "" : "0" + calendar.get(calendar.DAY_OF_MONTH));
        buf.append(" ");
        buf.append(calendar.get(calendar.HOUR_OF_DAY) > 9 ? calendar
                .get(calendar.HOUR_OF_DAY)
                + "" : "0" + calendar.get(calendar.HOUR_OF_DAY));
        buf.append(":");
        buf.append(calendar.get(calendar.MINUTE) > 9 ? calendar
                .get(calendar.MINUTE)
                + "" : "0" + calendar.get(calendar.MINUTE));
        buf.append(":");
        buf.append(calendar.get(calendar.SECOND) > 9 ? calendar
                .get(calendar.SECOND)
                + "" : "0" + calendar.get(calendar.SECOND));
        return buf.toString();
    }

    /**
     * 在指定的日期中按某个时间类型添加指定步长
     *
     * @param datetime
     *            YYYY-MM-DD HH:MM:SS
     * @param type
     *            YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
     * @param step
     *            步长 可以是整数或负数
     * @return 改变后的日期时间 YYYY-MM-DD HH:MM:SS
     */
    public static String getPreDateTime(String datetime, int type, int step) {

        Calendar calendar = new GregorianCalendar(Integer.parseInt(datetime
                .substring(0, 4)),
                Integer.parseInt(datetime.substring(5, 7)) - 1, Integer
                        .parseInt(datetime.substring(8, 10)), Integer
                        .parseInt(datetime.substring(11, 13)), Integer
                        .parseInt(datetime.substring(14, 16)), Integer
                        .parseInt(datetime.substring(17, 19)));
        calendar.add(type, step);
        return getDateTime(calendar);
    }

    /**
     * 根据字符串类型取得日期类型
     *
     * @param datetime
     *            String YYYY-MM-DD HH:MM:SS
     * @return Calendar
     */
    public static Calendar getCalendar(String datetime) {
        return new GregorianCalendar(
                Integer.parseInt(datetime.substring(0, 4)), Integer
                        .parseInt(datetime.substring(5, 7)) - 1, Integer
                        .parseInt(datetime.substring(8, 10)), Integer
                        .parseInt(datetime.substring(11, 13)), Integer
                        .parseInt(datetime.substring(14, 16)), Integer
                        .parseInt(datetime.substring(17, 19)));
    }

    /**
     * 在指定的日期中按某个时间类型添加指定步长
     *
     * @param datetime
     *            YYYY-MM-DD
     * @param type
     *            YEAR,MONTH,DAY
     * @param step
     *            步长 可以是整数或负数
     * @return 改变后的日期时间 YYYY-MM-DD
     */
    public static String getPreDate(String date, int type, int step) {
        Calendar calendar = new GregorianCalendar(Integer.parseInt(date
                .substring(0, 4)), Integer.parseInt(date.substring(5, 7)) - 1,
                Integer.parseInt(date.substring(8, 10)), 0, 0, 0);
        calendar.add(type, step);
        return getDateTime(calendar).substring(0, 10);
    }

    /**
     * 给指定日期按某个时间类型添加指定步长
     * @param date    日期类型
     * @param type    YEAR,MONTH,DAY...
     * @param step    步长 可以是整数或负数
     * @return
     */
    public static Date getDateAddInterval(Date date, int type, int step) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(type, step);
        return calendar.getTime();
    }

    /**
     * 取得当前日期的正数
     *
     * @return YYYYMMDD
     */

    public static int getDateInt() {
        String date = getDate();
        return Integer.parseInt(date.substring(0, 4) + date.substring(5, 7)
                + date.substring(8, 10));
    }
    
    /**
     * 取得指定日期的正数
     *
     * @return YYYYMMDD
     */

    public static int getDateInt(String date) {
        return Integer.parseInt(date.substring(0, 4) + date.substring(5, 7)
                + date.substring(8, 10));
    }
    
    /**
     * 取得当前日期的正数
     *
     * @return YYYYMMDD
     */

    public static int getDateTimeInt() {
        String date = getDate();
        return Integer.parseInt(date.substring(0, 4) + date.substring(5, 7)
                + date.substring(8, 10));
    }
    /**
     * 取得指定时间的时间戳
     * @param cov 时间格式可以为任何类型 yyyy-MM-dd/yyyyMMdd/yyyy-MM-dd HH:mm:ss
     * @param formate 对应的格式化串 yyyy-MM-dd/yyyyMMdd/yyyy-MM-dd HH:mm:ss
     * @return  timeStamp
     *     System.out.println(stringConversionStamp("2017-08-30","yyyy-MM-dd"));
        System.out.println(stringConversionStamp("2017-08-30 00:00:00","yyyy-MM-dd")); 格式化时间戳一样
     */
    public static long stringConversionStamp(String cov,String formate){
        SimpleDateFormat simpleDateFormat =new SimpleDateFormat(formate);
        Date date=null;
        try {
            date = simpleDateFormat.parse(cov);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long timeStemp = date.getTime();
      
        return timeStemp;
    }
    
    /**
     * 取得指定时间的时间戳
     * 时间格式:2017-08-30 10:31:18
     * @return long 时间戳
     */
    public static long getTimeStamp(String datetime) {
        return getCalendar(datetime).getTime().getTime();
    }

    /**
     * 取得当前的时间戳
     *
     * @return long 时间戳
     */
    public static long getTimeStamp() {
        return System.currentTimeMillis();
    }

    /**
     * 取得当前时间的正数
     *
     * @return HHMMSS
     */

    public static int getTimeInt() {
        String date = getDateTime();
        return Integer.parseInt(date.substring(11, 13) + date.substring(14, 16)
                + date.substring(17, 19));
    }

    /**
     * 结束时间和开始时间之间的时间差
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param type 1000得到秒,60000得到分,3600000得到小时
     * @return
     */
    public static long subtractTime(String endTime,String startTime,long type) {
        SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化时间
        long result = 0;
        try {
            // 这个的除以1000得到秒,相应的60000得到分,3600000得到小时
            result = (d.parse(endTime).getTime() - d.parse(startTime).getTime()) / type;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 获得当前时间的指定格式字符串
     * @return
     */
    public static String getCurrentDateString(String format)
    {
        return getDateString(new Date(),format);
    }
    
    /**
     * 获得指定时间的指定格式字符串
     * @param date
     * @param format
     * @return
     */
    public static String getDateString(Date date, String format){
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format( date );
    }
    
    /**
     * 获取指定日期的Date对象
     * @param dateString
     * @param format
     * @return
     */
    public static Date getStringDate(String dateString, String format){
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Date date = null;
        try {
            if(!StringUtils.isEmpty(dateString)){
                date = formatter.parse(dateString);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 格式化时间 输入 yyyymmdd 输出 yyyy-mm-dd
     *
     * @param time
     * @return
     */
    public static String formatTime(String time) {
        return time.substring(0, 4) +"-"+ time.substring(4, 6)+"-"+ time.substring(6, 8)+" "+time.substring(8, 10) +":"+ time.substring(10, 12)+":"+ time.substring(12, 14);
    }
    /**
     * example
     *
     * @param args
     */
    
    public static void main(String[] args) {
//         String str = DateUtil.getDateTime();
        // System.out.println(str);
        // System.out.println(DateUtil.getDate());
        // System.out.println(DateUtil.getTime());
        // System.out.println(DateUtil.getDateInt());
        // System.out.println(DateUtil.getTimeInt());
        // System.out.println(DateUtil.getPreDateTime(str, HOUR, 100));
        // System.out.println(DateUtil.getPreDateTime(str, SECOND, 100));
        // System.out.println(DateUtil.getPreDateTime(str, MINUTE, 100));
        // System.out.println(DateUtil.getPreDateTime(str, YEAR, 1));
        // System.out.println(DateUtil.getPreDateTime(str, MONTH, 1));
        // System.out.println(DateUtil.getPreDateTime(str, DAY, 10));
        // System.out.println(DateUtil.getTimeStampStr());
        // System.out.println("1" + "\r\n" + "2");
//           String a =
//            "SETUP\r\nCALL_TYPE:1\r\nCALLING_PARTY_NUMBER: 01088822279\r\n0";
//           System.out.println("subtract:"+subtractTime(formatTime("20140620091916"),"2014-06-20 09:20:19.0",1000));
//           System.out.println(formatTime("20140620091916"));
           /*Date date =
             getStringDate("2012-07-27 10:18:32.3","yyyy-MM-dd hh:mm:ss");
           String dateString = getDateString(date, "yyyy-MM-dd hh:mm:ss.S");
           System.out.println(dateString);
        long time = System.currentTimeMillis();
        System.out.println(time);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值