读书人

日期比较与变换集合

发布时间: 2012-12-20 09:53:21 作者: rapoo

日期比较与转换集合

近段时间关于日期的东西真是太烦人了,又是日期转换又是日期比较的,根据“合格的程序员就是不写重复代码的程序员”的指示精神。总结了一些,写了一个比较全的日期类,可以打成jar包来用。

package com.running.util;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Locale;/** * <p>Name: 日期工具类(DateUtils)</p> * <p>Author:No24</p> * <p>Date:2006-9-12 12:22:40</p> * <p>Modifier:Fifth</p> * <p>DateLastModified:2008-7-21 17:07</p> * <p>Version:V1.0.1</p> * <p>Description:</p> * <p>Remark:提供一些常用的日期方法 * V1.0.1版本添加了getDate的默认方法 * </p> * <p>Copyright:Copyright (c) No24 All rights reserved.</p> * <p>Company: XCY</p> * @author No24 * @version 1.0 */public abstract class DateUtils {    private static final String DEFAULT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";    /**     * 按指定格式获得当前日期字符串     * @param format 格式字符串     * @return 返回指定格式的当前日期字符串     */    public static String getDate(String format) {        Date date = new Date();        SimpleDateFormat sdf = new SimpleDateFormat(format);        return sdf.format(date);    }        /**     * 按默认的格式获得当前日期字符串     * @param format 格式字符串     * @return 返回指定格式的当前日期字符串     */    public static String getDate(){return new SimpleDateFormat(DEFAULT_DATE_TIME).format(new Date());}    /**     * 按指定格式获得指定日期字符串     * @param format 格式字符串     * @param date 指定日期     * @return 返回指定格式的指定日期字符串     */    public static String getDate(String format, Date date) {        SimpleDateFormat sdf = new SimpleDateFormat(format);        return sdf.format(date);    }        /**     * 获得指定日期前面或后面某小时的日期     * @param date 日期     * @param i 相差的小时数(负值为前面的日期)     * @return 返回指定日期前面或后面某小时的日期     */    public static Date relationSecond(Date date, int i) {        Calendar cal = Calendar.getInstance();        cal.setTime(date);        cal.add(Calendar.SECOND, i);        return cal.getTime();    }        /**     * 获得指定日期前面或后面某小时的日期     * @param date 日期     * @param i 相差的小时数(负值为前面的日期)     * @return 返回指定日期前面或后面某小时的日期     */    public static Date relationMinute(Date date, int i) {        Calendar cal = Calendar.getInstance();        cal.setTime(date);        cal.add(Calendar.MINUTE, i);        return cal.getTime();    }        /**     * 获得指定日期前面或后面某小时的日期     * @param date 日期     * @param i 相差的小时数(负值为前面的日期)     * @return 返回指定日期前面或后面某小时的日期     */    public static Date relationHour(Date date, int i) {        Calendar cal = Calendar.getInstance();        cal.setTime(date);        cal.add(Calendar.HOUR, i);        return cal.getTime();    }        /**     * 获得指定日期前面或后面某天的日期     * @param date 日期     * @param i 相差的天数(负值为前面的日期)     * @return 返回指定日期前面或后面某天的日期     */    public static Date relationDate(Date date, int i) {        Calendar cal = Calendar.getInstance();        cal.setTime(date);        cal.add(Calendar.DATE, i);        return cal.getTime();    }            /**     * 获得指定日期前面或后面某月的日期     * @param date 日期     * @param i 相差的月数(负值为前面的日期)     * @return 返回指定日期前面或后面某天的日期     */    public static Date relationMonth(Date date, int i) {        Calendar cal = Calendar.getInstance();        cal.setTime(date);        cal.add(Calendar.MONTH, i);        return cal.getTime();    }    /**     * 转换日期字符串成日期对象     * @param s 日期字符串     * @return 返回日期对象     * @throws  Exception     */    public static Date parseDate(String s) throws Exception {        DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT,new Locale("zh", "CN"));        return df.parse(s);    }        public static Date parseDate(String s,String format) throws Exception {    SimpleDateFormat sdf = null;    if (format == null) {    sdf = new SimpleDateFormat(DEFAULT_DATE_TIME);    } else {    sdf = new SimpleDateFormat(format);    }    return sdf.parse(s);    }        public static String getDirDate(){    Calendar calendar = Calendar.getInstance();    return calendar.get(Calendar.YEAR) + "/"+ (calendar.get(Calendar.MONTH)+1) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + "/";    }   // public static     //2011-1-14 闫振伟添加  //获得指定日期的本月最初时间和最后时间public static String getDate(int num,Date date){String stringDate="";SimpleDateFormat sf=null;if(num==1){sf=new SimpleDateFormat("yyyy-MM");stringDate=sf.format(date)+"-"+getFirstDayOfMonth(new Date())+" 00:00:00";}else if(num==2){sf=new SimpleDateFormat("yyyy-MM");int lastDay=getLastDayOfMonth(new Date());stringDate=sf.format(date)+"-"+lastDay+" 23:59:59";}return stringDate;}//获得某个月的第一天private static int getFirstDayOfMonth(Date a){    Calendar   b   =   Calendar.getInstance();     b.setTime(a);     int   firstDay   =   b.getActualMinimum(Calendar.DAY_OF_MONTH);     return firstDay;}//获得某个月的最后一天private static int getLastDayOfMonth(Date a){    Calendar   b   =   Calendar.getInstance();     b.setTime(a);     int   lastDay   =   b.getActualMaximum(Calendar.DAY_OF_MONTH);     return lastDay;}/**         * @param date1 需要比较的时间 不能为空(null),需要正确的日期格式 ,如:2009-09-12        * @param date2 被比较的时间  为空(null)则为当前时间         * @param stype 返回值类型   0为多少天,1为多少个月,2为多少年         * @return         * 举例:       * compareDate("2009-09-12", null, 0);//比较天       * compareDate("2009-09-12", null, 1);//比较月       * compareDate("2009-09-12", null, 2);//比较年       */public static int compareDate(String startDay,String endDay,int stype){             int n = 0;             String[] u = {"天","月","年"};             String formatStyle = stype==1?"yyyy-MM":"yyyy-MM-dd";                          endDay = endDay==null?getCurrentDate("yyyy-MM-dd"):endDay;                          DateFormat df = new SimpleDateFormat(formatStyle);             Calendar c1 = Calendar.getInstance();             Calendar c2 = Calendar.getInstance();             try {                 c1.setTime(df.parse(startDay));                 c2.setTime(df.parse(endDay));             } catch (Exception e3) {                 System.out.println("时间在初始化时出错!");             }             //List list = new ArrayList();             while (!c1.after(c2)) {                   // 循环对比,直到相等,n 就是所要的结果                 //list.add(df.format(c1.getTime()));    // 这里可以把间隔的日期存到数组中 打印出来                 n++;                 if(stype==1){                     c1.add(Calendar.MONTH, 1);          // 比较月份,月份+1                 }                 else{                     c1.add(Calendar.DATE, 1);           // 比较天数,日期+1                 }             }             n = n-1;             if(stype==2){                 n = (int)n/365;             }                //System.out.println(startDay+" -- "+endDay+" 相差多少"+u[stype]+":"+n);                   return n;         }      public static String compareTime(String startTime,String endTime,String format){Calendar c1 = Calendar.getInstance();             Calendar c2 = Calendar.getInstance();             DateFormat df = new SimpleDateFormat(format);        try {                 c1.setTime(df.parse(startTime));                 c2.setTime(df.parse(endTime));             } catch (Exception e3) {                 System.out.println("时间在初始化时出错!");             }        if(c1.after(c2)){        return "after";        }else if(c2.after(c1)){        return "before";        }else{        return "equals";        }}public static String getCurrentDate(String format){           Calendar day=Calendar.getInstance();            day.add(Calendar.DATE,0);            SimpleDateFormat sdf=new SimpleDateFormat(format);//"yyyy-MM-dd"           String date = sdf.format(day.getTime());           return date;       }     public static void main(String[] args){    //按指定类型获得当前时间    String date1=DateUtils.getDate("今天是 yyyy-MM-dd");    //按默认格式获得当前时间,默认格式是yyyy-MM-dd hh:mm:ss        String date2=DateUtils.getDate();        //按指定格式格式化指定日期        String date3=DateUtils.getDate("yyyy--MM--dd",new Date());        //获得指定日期前后的天数        Date date4=DateUtils.relationDate(new Date(), 0);      //获得指定日期前后的月数        Date date5=DateUtils.relationMonth(new Date(), 0);      //获得指定日期前后的小时数        Date date6=DateUtils.relationHour(new Date(), -1);      //获得指定日期前后的分钟数        Date date7=DateUtils.relationMinute(new Date(), -1);      //获得指定日期前后的秒数        Date date8=DateUtils.relationSecond(new Date(), -1);                //将日期字符串转换为日期对象        try {Date date9=DateUtils.parseDate("2010-11-11");System.out.println(DateUtils.getDate("yyyy-MM-dd", date9));Date date10=DateUtils.parseDate("2010-11-11 19:23:59","yyyy-MM-dd hh:mm:ss");String date11=DateUtils.getDirDate();System.out.println("-------------");System.out.println("date9="+date9);    System.out.println("date10="+date10);    System.out.println(date11);    System.out.println("-------------");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}    System.out.println(date1);    System.out.println(date2);    System.out.println(date3);    System.out.println(date4);    System.out.println(date5);    System.out.println(date6);    System.out.println(date7);    System.out.println(date8);    String date12=DateUtils.getDate(1, new Date());    System.out.println(date12);    String date13=DateUtils.getDate(2, new Date());    System.out.println(date13);    int date14=DateUtils.getLastDayOfMonth(new Date());    System.out.println(date14);    int date15=DateUtils.getFirstDayOfMonth(new Date());    System.out.println(date15);    }}

?

附上我的API,大家看了之后要多提建议呀。

1 楼 jamesji 2011-01-14 It should be a final class instead of abstract class. 2 楼 还有也许 2011-01-18 jamesji 写道It should be a final class instead of abstract class.
Your advice was very much to the point.

读书人网 >编程

热点推荐