import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * 时间控件 公用方法
 * @author rain
 *
 */
public class TimeFormat {
    /**
     * yyyy-MM-dd
     */
    public static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    /**
     * yyyy-MM-dd HH:mm:ss
     */
    public static final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    /**
     * yyyy-MM-dd HH:mm
     */
    public static final SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    /**
     * yyyy年MM月dd日
     */
    public static final SimpleDateFormat format3 = new SimpleDateFormat("yyyy年MM月dd日");
    /**
     * yyyy年MM月dd日 HH时mm分
     */
    public static final SimpleDateFormat format4 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
    
    /**
     *
     * @Title: currentTime
     * @Description: 获取当前时间  yyyy-MM-dd HH:mm:ss
     * @return String    返回类型
     *
     */
    public static String currentTime(){
        String str="";
        Date date = new Date();
        try {
            str = format1.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd):"+str);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    public static Date currentDate(){
        String  dateStr = format1.format(new Date());
    
    
        return     toDate(dateStr);
        
    }
    /**
     * 获取年份
     * @param date
     * @return 返回 year  eg:2013
     */
    @SuppressWarnings("deprecation")
    public static int getyears(Date date){
        return date.getYear()+1900;
    }
    
    /**
     * 获取当月的第几天
     * @param date
     * @return
     */
    @SuppressWarnings("deprecation")
    public static int getmonth(Date date){
        return date.getMonth()+1;
    }
    
    /**
     *
     * 转换时间格式yyyy-MM-dd
     * @param time
     * @return
     */
    public static String defaultTime(String time){
        String str="";
        if(time==null||time.trim().equals("")){
            return str;
        }
        Date date = new Date();
        try {
            date = toDate(time);
            if(date==null){
                return str;
            }
            str = format.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd):"+time);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    
    /**
     *
     * 转换时间格式yyyy-MM-dd
     * @param time
     * @return
     */
    public static String defaultTime(Date date){
        String str="";
        if(date==null){
            return str;
        }
        try {
            str = format.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd):"+date);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     *
     * @Title: formatTime
     * @Description: TODO时间格式转换
     * @param @param time
     * @param @param temp 指定的时间格式
     * @param @return    设定文件
     * @return String    返回类型
     * @throws
     */
    public static String formatTime(String time,String temp){
        String str="";
        
        if(time==null||time.trim().equals("")){
            return str;
        }
        if(temp==null||temp.trim().equals("")){
            return str;
        }
        Date date = new Date();
        try {
            date = toDate(time);
            if(date==null){
                return str;
            }
            SimpleDateFormat sf = new SimpleDateFormat(temp);
            str = sf.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd):"+time);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     *
     * 字符串时间格式化
     * @param date
     * @param temp 指定的时间格式
     * @return
     */
    public static String formatTime(Date date,String temp){
        String str="";
        if(temp==null||temp.trim().equals("")){
            return str;
        }if(date==null){
            return str;
        }
        try {
            SimpleDateFormat sf = new SimpleDateFormat(temp);
            str = sf.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常");
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * 转换时间格式yyyy-MM-dd HH:mm:ss
     * @param time
     * @return
     */
    public static String standardTime(String time){
        String str="";
        if(time==null||time.trim().equals("")){
            return str;
        }
        Date date = new Date();
        try {
            date = toDate(time);
            if(date==null){
                return str;
            }
            str = format1.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm:ss):"+time);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * 转换时间格式yyyy-MM-dd HH:mm:ss
     * @param time
     * @return
     */
    public static String standardTime(Date date){
        String str="";
        if(date==null){
            return str;
        }
        try {
            str = format1.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm:ss):"+date);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * 转换时间格式yyyy-MM-dd HH:mm
     * @param time
     * @return
     */
    public static String hourTime(String time){
        String str="";
        if(time==null||time.trim().equals("")){
            return str;
        }
        Date date = new Date();
        try {
            date = toDate(time);
            if(date==null){
                return str;
            }
            str = format2.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm):"+time);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * 转换时间格式yyyy-MM-dd HH:mm
     * @param time
     * @return
     */
    public static String hourTime(Date date){
        String str="";
        if(date==null){
            return str;
        }
        try {
            str = format2.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm):"+date);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * 转换时间格式yyyy-MM-dd HH:mm
     * @param time
     * @return
     */
    public static String hourTimeNull(Date date){
        String str="";
        if(date==null){
            return null;
        }
        try {
            str = format2.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm):"+date);
            str="";
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 字符串时间格式化
     * yyyy年MM月dd日
     * @param time
     * @return
     */
    public static String printTime(String time){
        String str="";
        if(time==null||time.trim().equals("")){
            return str;
        }
        Date date = new Date();
        try {
            date = toDate(time);
            if(date==null){
                return str;
            }
            str = format3.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm:ss):"+time);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * yyyy年MM月dd日
     * @param time
     * @return
     */
    public static String printTime(Date date){
        String str="";
        if(date==null){
            return str;
        }
        try {
            str = format3.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm:ss):"+date);
            str="";
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 字符串时间格式化
     * yyyy年MM月dd日 HH时mm分
     * @param time
     * @return
     */
    public static String printTime1(String time){
        String str="";
        if(time==null||time.trim().equals("")){
            return str;
        }
        Date date = new Date();
        try {
            date = toDate(time);
            if(date==null){
                return str;
            }
            str = format4.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm:ss):"+time);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串时间格式化
     * yyyy年MM月dd日 HH时mm分
     * @param time
     * @return
     */
    public static String printTime1(Date date){
        String str="";
        if(date==null){
            return str;
        }
        try {
            str = format4.format(date);
        } catch (Exception e) {
            System.out.println("转换时间格式异常(yyyy-MM-dd HH:mm:ss):"+date);
            str="";
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 字符串转换为时间格式。
     * @param time
     * @return Date
     */
    public static Date toDate(String time){
        Date date=null;
        if(time==null||time.equals("")){
            return null;
        }
        try {
            date = format1.parse(time);
        } catch (ParseException e) {
            try {
                date = format2.parse(time);
            } catch (ParseException e1) {
                try {
                    date = format.parse(time);
                } catch (ParseException e2) {
                    System.out.println("转化时间格式异常:"+time);
                }
            }
        }catch(Exception e){
            System.out.println("转化时间格式异常:"+time);
            e.printStackTrace();
        }
        return date;
    }
    
    
    /**
     * 当天的开始时间
     * @return
     */
    public static long startOfTodDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        Date date=calendar.getTime();
        return date.getTime();
    }
    /**
     * 当天的结束时间
     * @return
     */
    public static long endOfTodDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        Date date=calendar.getTime();
        return date.getTime();
    }
    /**
     * 明天的开始时间
     * @return
     */
    public static long startOfTomorrowday() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.add(Calendar.DATE, 1);
        calendar.set(Calendar.MILLISECOND, 0);
        Date date=calendar.getTime();
        return date.getTime();
    }
    /**
     * 昨天的开始时间
     * @return
     */
    public static long startOfyesterday() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.add(Calendar.DATE, -1);
        calendar.set(Calendar.MILLISECOND, 0);
        Date date=calendar.getTime();
        return date.getTime();
    }
    /**
     * 昨天的结束时间
     * @return
     */
    public static long endOfyesterday() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        calendar.add(Calendar.DATE, -1);
        Date date=calendar.getTime();
        return date.getTime();
    }
    /**
     * 功能:获取上周的开始时间
     */
    public static long startOfLastWeek() {
        return startOfThisWeek() - 7 * 24 * 60 * 60 * 1000;
    }
    /**
     * 功能:获取上周的结束时间
     */
    public static long endOfLastWeek() {
        return endOfThisWeek() - 7 * 24 * 60 * 60 * 1000;
    }
    /**
     * 功能:获取本周的开始时间 示例:2013-05-13 00:00:00
     */
    public static long startOfThisWeek() {
        Calendar currentDate = Calendar.getInstance();
        currentDate.setFirstDayOfWeek(Calendar.MONDAY);
        currentDate.set(Calendar.HOUR_OF_DAY, 0);
        currentDate.set(Calendar.MINUTE, 0);
        currentDate.set(Calendar.SECOND, 0);
        currentDate.set(Calendar.MILLISECOND, 0);
        currentDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        Date date=currentDate.getTime();
        return date.getTime();
    }
    /**
     * 功能:获取本周的结束时间 示例:2013-05-19 23:59:59
     */
    public static long endOfThisWeek() {
        Calendar currentDate = Calendar.getInstance();
        currentDate.setFirstDayOfWeek(Calendar.MONDAY);
        currentDate.set(Calendar.HOUR_OF_DAY, 23);
        currentDate.set(Calendar.MINUTE, 59);
        currentDate.set(Calendar.SECOND, 59);
        currentDate.set(Calendar.MILLISECOND, 999);
        currentDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        Date date=currentDate.getTime();
        return date.getTime();
    }
    /**
     * 功能:获取本月的开始时间
     */
    public static long startOfThisMonth() {
        Calendar currentDate = Calendar.getInstance();
        currentDate.set(Calendar.HOUR_OF_DAY, 0);
        currentDate.set(Calendar.MINUTE, 0);
        currentDate.set(Calendar.SECOND, 0);
        currentDate.set(Calendar.MILLISECOND, 0);
        currentDate.set(Calendar.DAY_OF_MONTH, 1);
        Date date=currentDate.getTime();
        return date.getTime();
    }
    public static long endOfThisMonth() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        cal.add(Calendar.MONTH, 1);
        cal.add(Calendar.DATE, -1);
        Date date=cal.getTime();
        return date.getTime();
    }
    /**
     * 功能:获取上月的开始时间
     */
    public static long startOfLastMonth() {
        Calendar currentDate = Calendar.getInstance();
        currentDate.set(Calendar.HOUR_OF_DAY, 0);
        currentDate.set(Calendar.MINUTE, 0);
        currentDate.set(Calendar.SECOND, 0);
        currentDate.set(Calendar.MILLISECOND, 0);
        currentDate.set(Calendar.DAY_OF_MONTH, 1);
        currentDate.add(Calendar.MONTH, -1);
        Date date=currentDate.getTime();
        return date.getTime();
    }
    /**
     * 功能:获取上月的结束时间
     */
    public static long endOfLastMonth() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        cal.add(Calendar.DATE, -1);
        Date date=cal.getTime();
        return date.getTime();
    }
    
    /**
     * 功能:获取本年的开始时间
     */
    public static long startOfTheYear(int year) {
        Calendar currentDate = Calendar.getInstance();
        currentDate.set(Calendar.YEAR, year);
        currentDate.set(Calendar.MONTH, 0);
        currentDate.set(Calendar.HOUR_OF_DAY, 0);
        currentDate.set(Calendar.MINUTE, 0);
        currentDate.set(Calendar.SECOND, 0);
        currentDate.set(Calendar.MILLISECOND, 0);
        currentDate.set(Calendar.DAY_OF_MONTH, 1);
        Date date=currentDate.getTime();
        return date.getTime();
    }
    /**
     * 功能:获取本年的开始时间
     */
    public static long endOfTheYear(int year) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH,11);
        cal.set(Calendar.DAY_OF_MONTH, 31);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        Date date=cal.getTime();
        return date.getTime();
    }
    
    /**
     * 日期时间字符串转换成秒
     * @param dateTime 字符串时间
     * @return
     */
    public static Long getTimeInMillis(String dateTime){
          Calendar calendar = Calendar.getInstance();
          try {
            calendar.setTime(format.parse(dateTime));
        } catch (ParseException e) {
            System.out.println("日期时间字符串转换成秒(yyyy-MM-dd):"+dateTime);
            e.printStackTrace();
        }
         return calendar.getTimeInMillis();
    }
    
}