package com.tscp.utils;

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

/**
 * 日期工具类
 * 
 * @author yangmin
 * @since 1.0
 * @version 2018-1-01 yangmin
 */
public class DateUtils {
    
    /** FIXME */
    private static SimpleDateFormat recordDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    
    /** 日期格式 yyyy-MM-dd */
    private static String DATE_FROM = "yyyy-MM-dd";
    
    /** 时间格式 yyyy-MM-dd HH:mm:ss */
    private static String DATE_TIME_FROM = "yyyy-MM-dd HH:mm:ss";
    
    /**
     * 返回指定日期前一天的日期,格式为yyyy-MM-dd
     * 
     * @param currentDay 指定日期
     * @return 值格式为yyyy-MM-dd
     */
    public static String getOneDayOfBefore(String currentDay) {
        String retDay = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            int amount = -1;
            Date currentDate = sdf.parse(currentDay);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(currentDate);
            // 减去1天
            calendar.add(Calendar.DAY_OF_MONTH, amount);
            Date date = calendar.getTime();
            retDay = sdf.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return retDay;
    }
    
    /**
     * 将日期以指定的格式格式化
     * 
     * @param strDate 要格式化的日期字符串
     * @param format 格式化的格式
     * @return 格式化后的字符串
     */
    public static Date parseDate(String strDate, String format) {
        Date dest = new Date();
        try {
            SimpleDateFormat df = new SimpleDateFormat(format);
            dest = df.parse(strDate);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dest;
    }
    
    /**
     * 将时间按指定的格式转换输出
     * 
     * @param date 待转换格式的时间
     * @param srcFormat 参数date的格式
     * @param destFormat 要求转换成的格式
     * @return 按指定格式转换后的时间字符串
     */
    public static String formate(String date, String srcFormat, String destFormat) {
        String dest = "";
        try {
            SimpleDateFormat df = new SimpleDateFormat(srcFormat);
            Date source = df.parse(date);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(source);
            df.applyPattern(destFormat);
            dest = df.format(calendar.getTime());
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dest;
    }
    
    /**
     * 将日期以指定的格式格式化
     * 
     * @param date 要格式化的日期
     * @param format 格式化的格式
     * @return 格式化后的字符串
     */
    public static String formatDate(Date date, String format) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        if (null == date) {
            date = new Date();
        }
        
        return dateFormat.format(date);
    }
    
    /**
     * 求时间差
     * 
     * @param startDt 开始时间
     * @param endDt 结束时间
     * @param dtFormater 开始时间和结束时间格式
     * @param diffType 时间差类型 秒、分、时、天
     * @return 时间差
     */
    public static int getDateDiff(String startDt, String endDt, String dtFormater, String diffType) {
        int num = 0;
        try {
            SimpleDateFormat df = new SimpleDateFormat(dtFormater);
            Date startDate = df.parse(startDt);
            Date endDate = df.parse(endDt);
            
            int divNum = 1000;
            
            if ("second".equals(diffType)) {
                divNum = divNum * 1;
            } else if ("minute".equals(diffType)) {
                divNum = divNum * 60;
            } else if ("hour".equals(diffType)) {
                divNum = divNum * 60 * 60;
            } else if ("day".equals(diffType)) {
                divNum = divNum * 60 * 60 * 24;
            }
            num = (int) ((endDate.getTime() - startDate.getTime()) / divNum);
            
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
        return num;
    }
    
    /**
     * 日期加天数
     * 
     * @param date 日期(格式为"yyyy-MM-dd")
     * @param format 格式
     * @param num 加的天数
     * @return String
     */
    public static Date dateAddDay(Date date, String format, int num) {
        Date addDate = new Date();
        SimpleDateFormat df = new SimpleDateFormat(format);
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, num);
        addDate = calendar.getTime();
        return addDate;
    }
    
    /**
     * 返回昨天的日期,格式为yyyy-MM-dd
     * 
     * @return String
     */
    public static String getYesterday() {
        Calendar rightNow;
        Date yesterday;
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
        long tmp;
        rightNow = Calendar.getInstance();
        tmp = rightNow.getTimeInMillis() - 24 * 60 * 60 * 1000;
        yesterday = new Date(tmp);
        return ft.format(yesterday);
    }
    
    /**
     * 获取当前时间
     * 
     * @return String
     */
    public static String getCurrentDateTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(new Date());
    }
}

平时经常会用到日期,写一个工具类,供以后使用。