java 封装日期操作类

import java.text.*;
import java.util.*;

/**
 *
 * @author
 */
public class DateTime {

    /**
     *  获取指定日期的当前星期(中国, 如:星期日,星期一,星期二)
     * @param time 要格式化的时间,如果为空则取当前日期
     */
    public static String getWeekCS(String sDate) {
        Calendar c = GregorianCalendar.getInstance();
        if (!(sDate == null || sDate.equals(""))) {
            Date date = formatDateStr(sDate, "yyyy-MM-dd");
            c.setTime(date);
        }

        c.setFirstDayOfWeek(Calendar.SUNDAY);
        String[] s = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        return s[c.get(Calendar.DAY_OF_WEEK) - 1];
    }

    /**
     * 对传入的时间进行格式化
     * @param time 要格式化的时间,如果为null则取当前时间
     * @param format 返回值的形式,为空则按"yyyy-MM-dd HH:mm:ss"格式化时间
     * @return 格式化后的时间字串
     */
    public static String formatDate(Date time, String format) {
        if (time == null) {
            time = new Date();
        }//获取当前time
        if (format == null || format.equals("")) {
            format = "yyyy-MM-dd HH:mm:ss";
        }
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        String dateString = formatter.format(time);
        return dateString;
    }

    /**
     * 对传入的时间字串进行格式化,并返回一个Date对象
     * @param time 要格式化的时间,如果为空则取当前时间
     * @param format 返回值的形式,为空则按"yyyy-MM-dd HH:mm:ss"格式化时间
     * @return 格式化后的时间
     */
    public static Date formatDateStr(String time, String format) {

        if (time == null || time.equals("")) {
            //获取当前time
            time = formatDate(null, null);
        }
        if (format == null || format.equals("")) {
            format = "yyyy-MM-dd HH:mm:ss";
        }
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        ParsePosition pos = new ParsePosition(0);//从0开始解析
        Date strtodate = formatter.parse(time, pos);
        return strtodate;
    }

    /**
     * 对传入的时间字串进行格式化
     * @param time 要格式化的时间,如果为空则取当前时间
     * @param format 返回值的形式,为空则按"yyyy-MM-dd HH:mm:ss"格式化时间
     * @return 格式化后的时间字串
     */
    public static String formatDateStrToStr(String time, String format) {
        return formatDate(formatDateStr(time, format), format);
    }

    /**
     * 获取指定日期的中国日期(yyyy年MM月dd日)
     * @param time 要格式化的时间,如果为null则取当前时间
     * @return 格式化后的日期字串
     */
    public static String getDateCS(Date time) {
        return formatDate(time, "yyyy年MM月dd日");
    }

    /**
     * 获取指定时间的长字符串形式 "yyyy-MM-dd HH:mm:ss"
     * @param time 要格式化的时间,如果为null则取当前时间
     * @return 格式化后的时间字串
     */
    public static String getLongStr(Date time) {
        return formatDate(time, null);
    }

    /**
     * 获得d天后的现在时刻;长字符串形式 "yyyy-MM-dd HH:mm:ss"
     * @param d //d天后
     * @return 格式化后的时间字串
     */
    public static String getLongStr(int d) {
        Calendar c = GregorianCalendar.getInstance();
        c.add(Calendar.DATE, d);//获得d天后的现在时刻
        Date time = c.getTime();
        return formatDate(time, null);
    }

    /**
     * 获取指定时间的短字符串形式 "yyyy-MM-dd"
     * @param time 要格式化的时间,如果为null则取当前时间
     * @return 格式化后的时间字串
     */
    public static String getShortStr(Date time) {
        return formatDate(time, "yyyy-MM-dd");
    }

    /**
     *  将字符串转换为一般时间的长格式:yyyy-MM-dd HH:mm:ss
     * @param strDate 要格式化的时间,如果为空则取当前时间
     * @return 格式化后的时间
     */
    public static Date getLongDate(String strDate) {
        return formatDateStr(strDate, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     *  将字符串转换为一般时间的短格式;yyyy-MM-dd
     * @param strDate 要格式化的时间,如果为空则取当前时间
     * @return 格式化后的时间
     */
    public static Date getShortDate(String strDate) {
        return formatDateStr(strDate, "yyyy-MM-dd");
    }

    /**
     * 获取时间 小时:分;秒 HH:mm:ss
     * @param strDate 要格式化的时间,如果为空则取当前时间
     * @return 格式化后的时间
     */
    public static String getStrTimeShort(String strDate) {
        return formatDateStrToStr(strDate, "HH:mm:ss");
    }

    /**
     *  将日期字符串加天数转换成新日期字符串
     * @param strDate 原日期字符串:
     * @param days 增加的天数
     * @return (yyyy-M-d)添加后的时间
     */
    public static String addDate(String strDate, int days) {
        String tmpDate = formatDateStrToStr(strDate, "yyyy-MM-dd");
        String[] date = tmpDate.split("-"); //将要转换的日期字符串拆分成年月日
        int year, month, day;
        year = Integer.parseInt(date[0]);
        month = Integer.parseInt(date[1]) - 1;
        day = Integer.parseInt(date[2]);
        GregorianCalendar d = new GregorianCalendar(year, month, day);
        d.add(Calendar.DATE, days);
        Date dd = d.getTime();
        DateFormat df = DateFormat.getDateInstance();
        String adddate = df.format(dd);
        return adddate;
    }

    /**
     *  //获取当前的时间
     */
    public static Date getNow() {
        Date currentTime = new Date();
        return currentTime;
    }

    /**
     * 用当前日期作为文件名,一般不会重名 取到的值是从当前时间的字符串格式,带有微秒,建议作为记录id 。一秒是一千微秒。
     * 如:20080403212345508
     */
    public static String getDateId() {
        return formatDate(null, "yyyyMMddHHmmssSSS");
    }

    /**
     * 提取一个月中的最后一天
     *
     * @param day
     * @return
     */
    public static Date getLastDate(long day) {
        Date date = new Date();
        long date_3_hm = date.getTime() - 3600000 * 34 * day;
        Date date_3_hm_date = new Date(date_3_hm);
        return date_3_hm_date;
    }

    /**
     * 得到现在时间
     * @return 字符串 yyyy-MM-dd
     */
    public static String getStringToday() {
        return formatDate(null, "yyyy-MM-dd");
    }

    /**
     * 得到现在小时
     */
    public static String getHour() {
        String dateString = formatDate(null, "yyyy-MM-dd HH:mm:ss");
        String hour = dateString.substring(11, 13);
        return hour;
    }

    /**
     * 得到现在分钟
     *
     * @return
     */
    public static String getMinute() {
        String dateString = formatDate(null, "yyyy-MM-dd HH:mm:ss");
        String min = dateString.substring(14, 16);
        return min;
    }

    /**
     * 二个小时时间间的差值,必须保证二个时间都是"HH:mm"的格式,返回字符型的分钟
     */
    public static String getTwoHour(String st1, String st2) {
        String[] kk = null;
        String[] jj = null;
        kk = st1.split(":");
        jj = st2.split(":");
        if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0])) {
            return "0";
        } else {
            double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
            double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
            if ((y - u) > 0) {
                return y - u + "";
            } else {
                return "0";
            }
        }
    }

    /**
     * 得到二个日期间的间隔天数
     */
    public static String getTwoDay(String sj1, String sj2) {
        SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
        long day = 0;
        try {
            java.util.Date date = myFormatter.parse(sj1);
            java.util.Date mydate = myFormatter.parse(sj2);
            day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
        } catch (Exception e) {
            return "";
        }
        return day + "";
    }

    /**
     * 时间前推或后推分钟,其中JJ表示分钟.
     * @param sj1 指定时间
     * @param jj 前推或后推分钟,其中JJ表示分钟
     * @return
     */
    public static String getPreTime(String sj1, String jj) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String mydate1 = "";
        try {
            Date date1 = format.parse(sj1);
            long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
            date1.setTime(Time * 1000);
            mydate1 = format.format(date1);
        } catch (Exception e) {
        }
        return mydate1;
    }

    /**
     * 判断是否润年
     *
     * @param ddate
     * @return
     */
    public static boolean isLeapYear(String ddate) {

        /**
         * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
         * 3.能被4整除同时能被100整除则不是闰年
         */
        Date d = formatDateStr(ddate, "yyyy-MM-dd");
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(d);
        int year = gc.get(Calendar.YEAR);
        if ((year % 400) == 0) {
            return true;
        } else if ((year % 4) == 0) {
            if ((year % 100) == 0) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }

    /**
     * 获取一个月的最后一天
     *
     * @param date
     * @return
     */
    public static String getEndDateOfMonth(String date) {
        String str = formatDateStrToStr(date, "yyyy-MM-dd");
        str = date.substring(0, 8);
        String month = date.substring(5, 7);
        int mon = Integer.parseInt(month);
        if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
            str += "31";
        } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
            str += "30";
        } else {
            if (isLeapYear(date)) {
                str += "29";
            } else {
                str += "28";
            }
        }
        return str;
    }

    /**
     * 判断二个时间是否在同一个周
     *
     * @param date1
     * @param date2
     * @return
     */
    public static boolean isSameWeekDates(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);
        int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        if (0 == subYear) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) {
                return true;
            }
        } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
            // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) {
                return true;
            }
        } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 产生周序列,即得到当前时间所在的年度是第几周
     *
     * @return
     */
    public static String getSeqWeek() {
        Calendar c = Calendar.getInstance(Locale.CHINA);
        String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
        if (week.length() == 1) {
            week = "0" + week;
        }
        String year = Integer.toString(c.get(Calendar.YEAR));
        return year + week;
    }

    /**
     * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号
     *
     * @param sdate
     * @param num 0-6,分别表示周一到周六
     * @return
     */
    public static String getWeek(String sdate, String num) {
        // 再转换为时间
        Date dd = formatDateStr(sdate, "yyyy-MM-dd");
        Calendar c = Calendar.getInstance();
        c.setTime(dd);
        if (num.equals("1")) // 返回星期一所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        } else if (num.equals("2")) // 返回星期二所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
        } else if (num.equals("3")) // 返回星期三所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        } else if (num.equals("4")) // 返回星期四所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
        } else if (num.equals("5")) // 返回星期五所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
        } else if (num.equals("6")) // 返回星期六所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        } else if (num.equals("0")) // 返回星期日所在的日期
        {
            c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        }
        return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
    }

    /**
     * 两个时间之间的天数
     *
     * @param date1
     * @param date2
     * @return
     */
    public static long getDays(String date1, String date2) {
        if (date1 == null || date1.equals("")) {
            return 0;
        }
        if (date2 == null || date2.equals("")) {
            return 0;
        }
        // 转换为标准时间
        SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date date = null;
        java.util.Date mydate = null;
        try {
            date = myFormatter.parse(date1);
            mydate = myFormatter.parse(date2);
        } catch (Exception e) {
        }
        long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
        return day;
    }

    /**
     * 取得数据库主键 生成格式为yyyyMMddhhmmssSSS+k位随机数
     *
     * @param k   表示是取几位随机数,可以自己定
     */
    public static String getSerialNo(int k) {

        return getDateId() + getRandom(k);
    }
    private static long seed = 1;

    /**
     * 返回一个随机数
     *
     * @param i  表示是取几位随机数,可以自己定
     * @return
     */
    public static String getRandom(int i) {
        Random jjj = new Random(seed);
        seed++;
        String jj = "";
        for (int k = 0; k < i; k++) {
            jj += jjj.nextInt(9);
        }
        return jj;
    }

    /**
     *
     * @param args
     */
    public static boolean isRightDate(String date) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        if (date == null || date.equals("")) {
            return false;
        }
        if (date.length() > 10) {
            sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        } else {
            sdf = new SimpleDateFormat("yyyy-MM-dd");
        }
        try {
            Date dt = sdf.parse(date);
            return dt == null ? false : true;
        } catch (ParseException pe) {
            return false;
        }
    }

    /***************************************************************************
     * //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1
     * 以年月日中文返回 2 以横线-返回 // 3 以斜线/返回 4 以缩写不带其它符号形式返回 // 5 以点号.返回
     **************************************************************************/
    public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(currentTime);
        String s_nd = dateString.substring(0, 4); // 年份
        String s_yf = dateString.substring(5, 7); // 月份
        String s_rq = dateString.substring(8, 10); // 日期
        String sreturn = "";
        if (sdate == null || sdate.equals("") || !isRightDate(sdate)) { // 处理空值情况
            if (nd.equals("1")) {
                sreturn = s_nd;
                // 处理间隔符
                if (format.equals("1")) {
                    sreturn = sreturn + "年";
                } else if (format.equals("2")) {
                    sreturn = sreturn + "-";
                } else if (format.equals("3")) {
                    sreturn = sreturn + "/";
                } else if (format.equals("5")) {
                    sreturn = sreturn + ".";
                }
            }
            // 处理月份
            if (yf.equals("1")) {
                sreturn = sreturn + s_yf;
                if (format.equals("1")) {
                    sreturn = sreturn + "月";
                } else if (format.equals("2")) {
                    sreturn = sreturn + "-";
                } else if (format.equals("3")) {
                    sreturn = sreturn + "/";
                } else if (format.equals("5")) {
                    sreturn = sreturn + ".";
                }
            }
            // 处理日期
            if (rq.equals("1")) {
                sreturn = sreturn + s_rq;
                if (format.equals("1")) {
                    sreturn = sreturn + "日";
                }
            }
        } else {
            // 是一个合法的日期值,则先将其转换为标准的时间格式
            sdate = formatDateStrToStr(sdate, "yyyy-MM-dd");
            s_nd = sdate.substring(0, 4); // 年份
            s_yf = sdate.substring(5, 7); // 月份
            s_rq = sdate.substring(8, 10); // 日期
            if (nd.equals("1")) {
                sreturn = s_nd;
                // 处理间隔符
                if (format.equals("1")) {
                    sreturn = sreturn + "年";
                } else if (format.equals("2")) {
                    sreturn = sreturn + "-";
                } else if (format.equals("3")) {
                    sreturn = sreturn + "/";
                } else if (format.equals("5")) {
                    sreturn = sreturn + ".";
                }
            }
            // 处理月份
            if (yf.equals("1")) {
                sreturn = sreturn + s_yf;
                if (format.equals("1")) {
                    sreturn = sreturn + "月";
                } else if (format.equals("2")) {
                    sreturn = sreturn + "-";
                } else if (format.equals("3")) {
                    sreturn = sreturn + "/";
                } else if (format.equals("5")) {
                    sreturn = sreturn + ".";
                }
            }
            // 处理日期
            if (rq.equals("1")) {
                sreturn = sreturn + s_rq;
                if (format.equals("1")) {
                    sreturn = sreturn + "日";
                }
            }
        }
        return sreturn;
    }

    public static String getNextMonthDay(String sdate, int m) {
        sdate = formatDateStrToStr(sdate, "yyyy-MM-dd");
        int year = Integer.parseInt(sdate.substring(0, 4));
        int month = Integer.parseInt(sdate.substring(5, 7));
        month = month + m;
        if (month < 0) {
            month += 12;
            year--;
        } else if (month > 12) {
            month -= 12;
            year++;
        }
        String smonth = "";
        if (month < 10) {
            smonth = "0" + month;
        } else {
            smonth = "" + month;
        }
        return year + "-" + smonth + "-01";
    }
}

转载于:https://www.cnblogs.com/puttnam/archive/2009/05/26/1490294.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值