时间格式相加减方法

package com.njwxb.swapp.common;


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


import com.njwxb.swapp.log.LogFactory;
import com.njwxb.swapp.log.Runlog;


/**
 * 时间工具类
 *
 * @author  陈鹏
 * @version  [版本号, 2013-7-2]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public abstract class DateUtil
{
    private static Runlog runLog = LogFactory.getRunlog();


    private static String sdf14 = "yyyyMMddHHmmss";


    private static String sdf17 = "yyyyMMddHHmmssSSS";


    private static String sdfhuman = "yyyy-MM-dd HH:mm:ss";


    private static String sdfcn = "yyyy年MM月dd日 HH:mm";


    private static String sdfymd = "yyyy-MM-dd";


    private static String sdfcn8 = "yyyy年MM月dd日";


    public static String getCurrentTime14()
    {
        SimpleDateFormat sdf14Format = new SimpleDateFormat(sdf14);
        return sdf14Format.format(new Date());
    }


    public static String getCurrentTime17()
    {
        SimpleDateFormat sdf17Format = new SimpleDateFormat(sdf17);
        return sdf17Format.format(new Date());
    }


    public static String getCurrentTimeHuman()
    {
        SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
        return sdfhumanFormat.format(new Date());
    }


    public static String getCurrentCnTime()
    {
        SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
        return sdfcnFormat.format(new Date());
    }


    public static String formateCurrentCnTime(Calendar calendar)
    {
        SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
        return sdfcnFormat.format(calendar.getTime());
    }


    public static String formateTimeFromSdfhumanToSdfymd(String dateStr)
    {
        try
        {
            SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            return sdfymdFormat.format(sdfhumanFormat.parse(dateStr));
        }
        catch (ParseException e)
        {
            return formateCurrentCnTime(Calendar.getInstance());
        }
    }


    public static String formateCurrentCnTime(String dateStr)
    {
        try
        {
            SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
            return sdfcnFormat.format(sdfcnFormat.parse(dateStr));
        }
        catch (ParseException e)
        {
            return formateCurrentCnTime(Calendar.getInstance());
        }
    }


    public static String formateCurrentHumanTime(String dateStr)
    {
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
            return sdfcnFormat.format(sdfhumanFormat.parse(dateStr));
        }
        catch (ParseException e)
        {
            return formateCurrentCnTime(Calendar.getInstance());
        }
    }


    public static String getCurrentYearMonthDay()
    {
        SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
        return sdfymdFormat.format(new Date());
    }


    /**
     * 年份增加几年
     * @param datestr 日期
     * @param step 增加的年份,负数为减少年份
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String addsdfymdYear(String datestr, int step)
    {
        try
        {
            SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
            Date date = sdfymdFormat.parse(datestr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.YEAR, step);
            return sdfymdFormat.format(calendar.getTime());
        }
        catch (ParseException e)
        {
            runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
        }
        return null;
    }


    /**
     * 日期增加几天
     * @param datestr 日期
     * @param step 增加的天数,负数为减少调试
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String addsdfymdDay(String datestr, int step)
    {
        try
        {
            SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
            Date date = sdfymdFormat.parse(datestr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.DATE, step);
            return sdfymdFormat.format(calendar.getTime());
        }
        catch (ParseException e)
        {
            runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
        }
        return null;


    }


    /**
     * 时间相减得到天数
     * @param datestr 日期  datestr1 - datestr2
     * @param step 增加的年份,负数为减少年份
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static long getDaySub(String datestr1, String datestr2)
    {
        if (runLog.isDebugEnabled())
        {
            runLog.debug("inMethod getDaySub", "datestr1", datestr1, "datestr2", datestr2);
        }


        long day = 0;
        try
        {
            SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
            Date beginDate = sdfymdFormat.parse(datestr2);
            Date endDate = sdfymdFormat.parse(datestr1);
            day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        }
        catch (ParseException e)
        {
            runLog.error("getDaySub error!datestr1=" + datestr1 + "datestr1" + datestr1, e);
        }


        if (runLog.isDebugEnabled())
        {
            runLog.debug("outMethod getDaySub", "day", day);
        }
        return day;
    }


    /**
     * 时间相减得到分钟数
     * @param datestr 日期  datestr1 - datestr2
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static long getHumanMinSub(String datestr1, String datestr2)
    {
        long day = 0;
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            Date beginDate = sdfhumanFormat.parse(datestr2);
            Date endDate = sdfhumanFormat.parse(datestr1);
            day = (endDate.getTime() - beginDate.getTime()) / (60 * 1000);
        }
        catch (ParseException e)
        {
            runLog.error("getDaySub error!datestr1=" + datestr1 + "datestr1" + datestr1, e);
        }
        return day;
    }


    /**
     * 如果data1大于data2,则返回true,否则返回false
     * @param data1
     * @param data2
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static boolean compareToData(String data1, String data2)
    {
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            Date a = sdfhumanFormat.parse(data1);
            Date b = sdfhumanFormat.parse(data2);
            if (a.getTime() - b.getTime() > 0)
            {
                return true;
            }
        }
        catch (Exception e)
        {
            runLog.error("compare date error!data1=" + data1 + "data2=" + data2, e);
        }
        return false;
    }


    /**
     * 如果data1(yyyy-MM-dd)大于等于data2(yyyy-MM-dd),则返回true,否则返回false
     * @param data1
     * @param data2
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static boolean compareToData2(String data1, String data2)
    {
        try
        {
            SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
            Date a = sdfymdFormat.parse(data1);
            Date b = sdfymdFormat.parse(data2);
            if (a.getTime() - b.getTime() >= 0)
            {
                return true;
            }
        }
        catch (Exception e)
        {
            runLog.error("compare date error!data1=" + data1 + "data2=" + data2, e);
        }
        return false;
    }


    /**
     * 获得固定格式的系统当前时间的日期
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getSystemCurrData()
    {
        Date date = new Date();
        SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
        return sdfhumanFormat.format(date);
    }


    /**
     * 日期增加几天
     * @param datestr 日期
     * @param step 增加的天数,负数为减少天数
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String addDay(String datestr, int step)
    {
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            Date date = sdfhumanFormat.parse(datestr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.DATE, step);
            return sdfhumanFormat.format(calendar.getTime());
        }
        catch (ParseException e)
        {
            runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
        }
        return null;


    }


    /**
     * 日期增加几天
     * @param datestr 日期
     * @param step 增加的天数,负数为减少的天数
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String addMonth(String datestr, int step)
    {
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            Date date = sdfhumanFormat.parse(datestr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.MONTH, step);
            return sdfhumanFormat.format(calendar.getTime());
        }
        catch (ParseException e)
        {
            runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
        }
        return null;


    }


    public static boolean dateIsToday(String datestr)
    {
        try
        {
            Date curDate = new Date();
            SimpleDateFormat simpFormat = new SimpleDateFormat(sdfymd);
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            String curDateStr = simpFormat.format(curDate);


            Date date = sdfhumanFormat.parse(datestr);
            Date startDate = sdfhumanFormat.parse(curDateStr + " 00:00:00");
            Date endDate = sdfhumanFormat.parse(curDateStr + " 23:59:59");


            if (date.getTime() <= endDate.getTime() && date.getTime() >= startDate.getTime())
            {
                return true;
            }
        }
        catch (ParseException e)
        {
            runLog.error("parse datestr fail! datestr=" + datestr, e);
        }
        return false;
    }


    public static boolean isHumanFormat(String datestr)
    {
        boolean isHuman = false;
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            Date date = sdfhumanFormat.parse(datestr);
            String tmp = sdfhumanFormat.format(date);
            isHuman = datestr.equals(tmp);
        }
        catch (ParseException e)
        {
            runLog.error("add day error!datestr=", "isHuman", isHuman, e);
        }
        return isHuman;
    }


    /**
     * 获取昨天零点,格式为  YYYY年MM月DD日 HH:MM
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getYesterdayZero(int day)
    {
        try
        {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date());
            calendar.add(Calendar.DATE, day);
            SimpleDateFormat simpFormat = new SimpleDateFormat(sdfcn8);
            String timeStr = simpFormat.format(calendar.getTime()) + "00:00";
            return timeStr;
        }
        catch (Exception e)
        {
            runLog.error("parse datestr fail!", e);
        }
        return null;
    }


    /**
     * 获取当前时间的周一日期
     *
     * @param datestr
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getMondayOfDate(String datestr)
    {
        Date date = null;
        //周日到周一为0-6
        Integer week = null;
        //周一的日期
        String monday = null;
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            date = sdfhumanFormat.parse(datestr);


            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            week = cal.get(Calendar.DAY_OF_WEEK) - 1;
            if (week < 0)
            {
                week = 0;
            }
            if (week > 0)
            {
                monday = addDay(datestr, -(week - 1));
            }
            else
            {
                monday = addDay(datestr, -6);
            }
        }
        catch (Exception e)
        {
            runLog.error("parse datestr fail!", e);
        }


        return monday;
    }


    /**
     * 获取当前月的第一天或最后一天
     *
     * @param datestr
     * @param flag
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getMonthFirstOrLastDay(String datestr, String flag)
    {
        Date date = null;
        String day = null;
        try
        {
            SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
            date = sdfhumanFormat.parse(datestr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            // 设置日期为本月最大日期
            if ("first".equals(flag))
            {
                calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DATE));
            }
            else if ("last".equals(flag))
            {
                calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
            }
            day = sdfhumanFormat.format(calendar.getTime());
        }
        catch (Exception e)
        {
            runLog.error("parse datestr fail!", e);
        }


        return day;
    }


    /**
     * 获取某月的最后一天或第一天
     *
     * @param year
     * @param month
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String getDayOfMonth(Integer year, Integer month, String flag)
    {
        Calendar cal = Calendar.getInstance();
        //设置年份
        if (year != null)
        {
            cal.set(Calendar.YEAR, year);
        }
        else
        {
            cal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
        }
        //设置月份
        if (month != null)
        {
            cal.set(Calendar.MONTH, month - 1);
        }
        else
        {
            cal.set(Calendar.MONTH, cal.get(Calendar.MONTH));
        }


        //获取某月最大或最小天数天数
        if ("first".equals(flag))
        {
            cal.set(Calendar.DATE, cal.getActualMinimum(Calendar.DATE));
        }
        else if ("last".equals(flag))
        {
            cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
        }
        //格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat(sdfymd);
        String day = sdf.format(cal.getTime());


        return day;
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值