JAVA常用的日期操作方法

来源:互联网 发布:网络环境的现状 编辑:程序博客网 时间:2024/05/22 10:01
 

public class DateUtil {

//判断当天是否是周末

public static boolean isWeekend(String date){
  String datum = "2011-10-08";// 基准日期
  int dayCount = 0;
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  try {
   dayCount = (int) ((sdf.parse(date).getTime() - sdf.parse(datum)
     .getTime()) / (1000 * 60 * 60 * 24));
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return (dayCount % 7 == 0 || dayCount % 7 == 1);
 }


    /**
     * 私有构造方法,防止类的实例化,因为工具类不需要实例化。
     */
    private DateUtil() {
    }

    /**
     * 格式化timestamp日期型
     *
     * @param timestamp 日期
     * @return 格式化后的日期,格式如:2005-12-04
     */
    public static String convertDate(long timestamp) {
        return new SimpleDateFormat("yyyy-MM-dd").format(new Date(timestamp));
    }

    /**
     * 格式化日期(当前日期)
     *
     * @return 格式如:2005-12-05 12:25:36
     */
    public static String getDateTime() {
        return getDateTime(new java.util.Date());
    }

    /**
     * 取得SQL类型的DATE
     * util.date转成sql.date
     *
     * @param d
     * @return
     */
    public static java.sql.Date getSQLDate(Date d) {
        return new java.sql.Date(d.getTime());
    }

    /**
     * 把Object对像转换成Date类型
     * 如果对像为空或格式不能解析,返回当前日期
     *
     * @param o
     * @return
     */
    public static Date getDate(Object o) {
        if (o == null) {
            return new Date();
        } else if (o instanceof Date) {
            return (Date) o;
        } else if (o instanceof String) {
            return getDate(String.valueOf(o));
        } else if (o instanceof java.sql.Timestamp) {
            return new Date(((java.sql.Timestamp) o).getTime());
        } else {
            return new Date();
        }
    }

    /**
     * 根据传入的日期转换成字符形式的日期
     *
     * @param date 日期型
     * @return 如:2005-12-25 08:25:36
     */
    public static String getDateTime(java.util.Date date) {
        if (date == null) return "";
        SimpleDateFormat formatter =
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * 日期格式化成日期时分,不取秒,
     *
     * @param date
     * @return 2005-12-25 12:25
     */
    public static String getDateHF(java.util.Date date) {
        if (date == null) return "";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * 日期格式化成时分,不取秒,
     *
     * @param date
     * @return 12:25
     */
    public static String getHF(java.util.Date date) {
        if (date == null) return "";
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * @param date
     * @return
     */
    public static String getTimeString(java.util.Date date) {
        if (date == null) return "";
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * 取得年月日
     *
     * @return 2008-12-25
     */
    public static String getDateString() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String NDate = formatter.format(new Date());
        return NDate;
    }

    /**
     * 取得年月日
     *
     * @return 08-12-25
     */
    public static String getShortDateString() {
        SimpleDateFormat formatter = new SimpleDateFormat("yy-MM-dd");
        String NDate = formatter.format(new Date());
        return NDate;
    }

    /**
     * 取得年月日
     *
     * @param date
     * @return 20058-12-25
     */
    public static String getDateString(Date date) {
        if (date == null) return "";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * 取得中文格式的日期
     *
     * @return 2005后12月25日
     */
    public static String getCnDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日");
        String NDate = formatter.format(new Date());
        return NDate;
    }

    /**
     * 取得中文格式的日期
     *
     * @param d
     * @return 2005后12月25日
     */
    public static String getCnDateTime(Date d) {
        if (d == null) d = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
        String NDate = formatter.format(d);
        return NDate;
    }


    /**
     * 取得中文格式的日期
     *
     * @param d
     * @return 2005后12月25日
     */
    public static String getCnDate(Date d) {
        if (d == null) d = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日");
        String NDate = formatter.format(d);
        return NDate;
    }

    /**
     * 根据传入的格式取得日期字符串
     *
     * @param date
     * @param Str  格式化格式,如yyyy-MM-dd
     * @return
     */
    public static String getDateStrByProp(Date date, String Str) {
        if (date == null) return "";
        String NDate = "";
        try {
            SimpleDateFormat formatter = new SimpleDateFormat(Str);
            NDate = formatter.format(date);
        } catch (Exception e) {
            NDate = "";
        }
        return NDate;
    }

    /**
     * 取得当前日期的Long型
     * 如1212452121222
     *
     * @return
     */
    public static long getTime() {

        return (new java.util.Date()).getTime();
    }

    /**
     * 根据日期取得年月日
     * 不推荐使用
     *
     * @param DateString
     * @return
     */
    public static String getStrDate(String DateString) {
        return DateString.substring(0, 10);
    }

    /**
     * 根据日期取得年月日
     * 不推荐使用
     *
     * @return
     */
    public static String getStrDate() {
        return getDateTime().substring(0, 10);
    }

    /**
     * 比较日期大小
     *
     * @param last
     * @param now
     * @return
     */
    public static boolean compareTo(String last, String now) {
        try {
            //DateFormat formatter=DateFormat.getDateInstance();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date temp1 = formatter.parse(last);
            Date temp2 = formatter.parse(now);
            if (temp1.after(temp2)) {
                return false;
            } else if (temp1.before(temp2)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 取得  addLong 毫秒以前(以后)的时间
     *
     * @param olddate
     * @param addLong
     * @return
     */
    public static Date getAddDate(Date olddate, long addLong) {
        long temp = olddate.getTime();
        temp = temp + addLong;
        return new Date(temp);
    }

    /**
     * @param date1
     * @param date2
     * @return
     */
    public static int DateDiff(String date1, String date2) {
        long d1 = Math.abs(getDate(date2).getTime() - getDate(date1).getTime());
        int dNum = Math.round(d1 / 1000 / 60 / 60 / 24);
        return dNum;
    }

    public static int DateDiff(Date date1, Date date2) {
        if (date1 == null || date2 == null) return 0;
        long d1 = Math.abs(date2.getTime() - date1.getTime());
        int dNum = Math.round(d1 / 1000 / 60 / 60 / 24);
        return dNum;
    }

  

    /**
     * 把字符串转换成时间,格式为:yyyy-MM-dd HH:mm:ss
     *
     * @param dateStr
     * @return
     */
    public static Date getDate(String dateStr) {
        Date temp1 = null;
        if (dateStr == null) return null;
        if (dateStr.equals("")) return null;
        SimpleDateFormat formatter = null;
        try {
            if (dateStr.indexOf(" ") != -1) {
                String[] aa = StringUtil.split(dateStr, ":");
                if (aa.length == 3)
                    formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                else if (aa.length == 2)
                    formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                else
                    formatter = new SimpleDateFormat("yyyy-MM-dd HH");
            } else {
                formatter = new SimpleDateFormat("yyyy-MM-dd");
            }
            temp1 = formatter.parse(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return temp1;
    }

    /**
     * 把long型日期转换成天数
     *
     * @param date
     * @return
     */
    public static String getDateLength(long date) {
        String s = "";
        if (date > 1000 * 60 * 60 * 24) {
            s += date / (1000 * 60 * 60 * 24) + "天";
            date = date % (1000 * 60 * 60 * 24);
        }
        if (date > 1000 * 60 * 60) {
            s += date / (1000 * 60 * 60) + "时";
            date = date % (1000 * 60 * 60);
        }
        if (date > 1000 * 60) {
            s += date / (1000 * 60) + "分";
        }
        return s;
    }

    /**
     * 取得当前时间
     *
     * @return
     */
    public static Date getDate() {
        return new Date();
    }

    /**
     * 取得当前星期
     *
     * @return
     */
    public static String getWeekDay() {
        String[] weekDay = new String[]{"星期日", "星期一", "星期二",
                "星期三", "星期四", "星期五", "星期六"};
        Calendar ca = Calendar.getInstance();
        return weekDay[ca.get(Calendar.DAY_OF_WEEK) - 1];
    }

    /**
     * 取得当前星期
     *
     * @return
     */
    public static String getWeekDay(Date date) {
        if(date==null){

            return  "";
        }
        else{
        String[] weekDay = new String[]{"星期日", "星期一", "星期二",
                "星期三", "星期四", "星期五", "星期六"};
        Calendar ca = Calendar.getInstance();
        ca.setTime(date);
        return weekDay[ca.get(Calendar.DAY_OF_WEEK) - 1];
        }
      }


    /**
     * 取得指定周开始日期
     * 默认从该周周一
     *
     * @param year
     * @param week
     * @return
     */
    public static Date getWeekBeginDate(int year, int week) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.WEEK_OF_YEAR, week);
        c.set(Calendar.DAY_OF_WEEK, 2);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        return c.getTime();
    }

    /**
     * 取得指定周结束日期
     * 默认为该周周日
     *
     * @param year
     * @param week
     * @return
     */
    public static Date getWeekEndDate(int year, int week) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.WEEK_OF_YEAR, week + 1);
        c.set(Calendar.DAY_OF_WEEK, 1);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }


    /**
     * 根据日期生成目录
     *
     * @param d
     * @return
     */
    public static String getDatePath(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        StringBuffer path = new StringBuffer();
        path.append("/");
        path.append(c.get(Calendar.YEAR));
        path.append("/");
        path.append(c.get(Calendar.MONTH) + 1);
        path.append("/");
        path.append(c.get(Calendar.DATE));
        return path.toString();
    }

    /**
     * 根据日期生成访问路经
     *
     * @param d
     * @return
     */
    public static String getDateViewPath(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        StringBuffer path = new StringBuffer();
        path.append("/");
        path.append(c.get(Calendar.YEAR));
        path.append("/");
        path.append(c.get(Calendar.MONTH) + 1);
        path.append("/");
        path.append(c.get(Calendar.DATE));
        return path.toString();
    }

    /**
     * 获取下一年的年份
     * @return
     */
    public static String getNextYear(){
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        return String.valueOf(year+1);
    }

    /**
     * 获取当前日期加上指定天数的新日期
     * @param days
     * @return
     */
    public static String getAddDay(int days){
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DAY_OF_YEAR,days);
        return c.getTime().toLocaleString();
    }
    /**
     * 获取当前年
     * @return
     */
    public static String getDateY(){
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
        String NDate = formatter.format(new Date());
        return NDate;
    }

    /**
     * 获取当前年
     * @return
     */
    public static String getDateY(Date date){
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * 获取当前月
     * @return
     */
    public static String getDateM(){
        SimpleDateFormat formatter = new SimpleDateFormat("MM");
        String NDate = formatter.format(new Date());
        return NDate;
    }

    /**
     * 通过指定的日期获取月份
     * @param date
     * @return
     */
    public static String getDateM(Date date){
        SimpleDateFormat formatter = new SimpleDateFormat("MM");
        String NDate = formatter.format(date);
        return NDate;
    }

    /**
     * 获取当前日
     * @return
     */
    public static String getDateD(){
        SimpleDateFormat formatter = new SimpleDateFormat("dd");
        String NDate = formatter.format(new Date());
        return NDate;
    }

    /**
     * 获取当前日
     * @return
     */
    public static String getDateD(Date date){
        SimpleDateFormat formatter = new SimpleDateFormat("dd");
        String NDate = formatter.format(date);
        return NDate;
    }


    /**
     * 年份下拉列表
     * @param beforeNum 从当前年份向前推移(0 为当前年份)
     * @param afterNum  从当前年份向后推移
     * @param objName   select控件名称
     * @param objValue  select控件默认被选中值
     * @param styleStr  select控件样式
     * @param event     select控件触发事件
     * @return String
     */
    public static String getYearSelect(int beforeNum,int afterNum,String objName,String objValue,String styleStr,String event,String defaultValue){
        StringBuffer htmlStr=new StringBuffer();
        try{
            String curYear=getDateY();
            if(curYear==null||"".equals(curYear)){
                curYear="2008";
            }
            int beginYear=Integer.parseInt(curYear)-beforeNum;
            int endYear=Integer.parseInt(curYear)+afterNum;
            if(beginYear>endYear){
                htmlStr.append("开始年度应该小于结束年度");
            }else{
                htmlStr.append("<select name=\""+objName+"\" ");
                if(event!=null&&!event.equals("")){
                    htmlStr.append(event);
                }
                if(styleStr!=null&&!styleStr.equals("")){
                   htmlStr.append(" style=\""+styleStr+"\"");
                }else{
                   htmlStr.append(" style=width:100px;\"");
                }
                htmlStr.append(">");
                if(defaultValue!=null&&!defaultValue.equals("")){
                    htmlStr.append("<option value=\"\">"+defaultValue+"</option>");
                }
                for(int i=beginYear;i<=endYear;i++){
                    htmlStr.append("<option value=\""+i+"\"");
                    if(objValue!=null&&!objValue.equals("")&&objValue.equals(String.valueOf(i))){
                        htmlStr.append(" selected");
                    }
                    htmlStr.append(">"+i+"年</option>");
                }
                htmlStr.append("</select>");
            }
        }catch(Exception e){
            System.out.println("DateUtil getYearSelect is error!");
            e.printStackTrace();
        }finally{
            return htmlStr.toString();
        }

    }


    /**
     * 年份下拉列表
     * @param objName   select控件名称
     * @param objValue  select控件默认被选中值
     * @param styleStr  select控件样式
     * @param event     select控件触发事件
     * @return String
     */
    public static String getMonthSelect(String objName,String objValue,String styleStr,String event,String defaultValue){
        StringBuffer htmlStr=new StringBuffer();
        try{
            htmlStr.append("<select name=\""+objName+"\" ");
            if(event!=null&&!event.equals("")){
                htmlStr.append(event);
            }
            if(styleStr!=null&&!styleStr.equals("")){
               htmlStr.append(" style=\""+styleStr+"\"");
            }else{
               htmlStr.append(" style=width:100px;\"");
            }
            htmlStr.append(">");
            if(defaultValue!=null&&!defaultValue.equals("")){
                    htmlStr.append("<option value=\"\">"+defaultValue+"</option>");
            }
            for(int i=1;i<=12;i++){
                if(i<10){
                    htmlStr.append("<option value=\"0"+i+"\"");
                    if(objValue!=null&&!objValue.equals("")&&objValue.equals("0"+String.valueOf(i))){
                        htmlStr.append(" selected");
                    }
                    htmlStr.append(">0"+i+"月</option>");
                }else{
                    htmlStr.append("<option value=\""+i+"\"");
                    if(objValue!=null&&!objValue.equals("")&&objValue.equals(String.valueOf(i))){
                        htmlStr.append(" selected");
                    }
                    htmlStr.append(">"+i+"月</option>");
                }
            }
            htmlStr.append("</select>");
        }catch(Exception e){
            System.out.println("DateUtil getMonthSelect is error!");
            e.printStackTrace();
        }finally{
            return htmlStr.toString();
        }
    }
   
   
   /** 获取当前月日 短日期类型
    * 比如0422
    * @return
    */
   public static String getDateMD(){
       SimpleDateFormat formatter = new SimpleDateFormat("MMDD");
       String NDate = formatter.format(new Date());
       return NDate;
   }
  
   /**
    * 获取当前月日 短日期类型
    * 比如0422
    * @return
    */
   public static String getDateMD(Date date){
       SimpleDateFormat formatter = new SimpleDateFormat("MMDD");
       String NDate = formatter.format(date);
       return NDate;
   }
  
  
   public static Date getAddDate(Date currentDate,int addDays){
    Calendar c= Calendar.getInstance();
    String dateStr = getDateString(currentDate);
    String[] dates = dateStr.split("-");
    if(dates!=null && dates.length == 3){
     c.set(Integer.parseInt(dates[0]),Integer.parseInt(dates[1])-1,Integer.parseInt(dates[2]));
    }
    c.add(Calendar.DATE,addDays);
    return c.getTime();
   }
  
   public static String getAddDateString(Date currentDate,int addDays){
    Calendar c= Calendar.getInstance();
    String dateStr = getDateString(currentDate);
    String[] dates = dateStr.split("-");
    if(dates!=null && dates.length == 3){
     c.set(Integer.parseInt(dates[0]),Integer.parseInt(dates[1])-1,Integer.parseInt(dates[2]));
    }
    c.add(Calendar.DATE,addDays);
    return getDateString(c.getTime());
   }
  
   public static String getAddDateTimeString(Date currentDate,int addDays){
    Calendar c= Calendar.getInstance();
    String dateStr = getDateString(currentDate);
    String[] dates = dateStr.split("-");
    if(dates!=null && dates.length == 3){
     c.set(Integer.parseInt(dates[0]),Integer.parseInt(dates[1])-1,Integer.parseInt(dates[2]));
    }
    c.add(Calendar.DATE,addDays);
    return getDateTime(c.getTime());
   }
   public static String getDateOperation(int addDays){
    Calendar ca=Calendar.getInstance(); 
    int num=ca.get(Calendar.DAY_OF_MONTH)- addDays;
    ca.set(Calendar.DAY_OF_MONTH,num);//设定时间,将小时数的改变加进去。\

    return getDateString(ca.getTime());
   }
 
   public static void main(String[] s) {
//       String bDate = "2005-11-12";
//       String eDate = "2005-11-12";
//       System.out.println("bDate:" + bDate);
//       System.out.println("eDate:" + eDate);
//       int d = DateUtil.DateDiff(bDate, eDate);
//       System.out.println("d:" + d);
//    String dates = "2011-06-19";
    int add = -30;
    System.out.println(DateUtil.getDateOperation(2));
   
   }
  
  

}

 

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

import org.apache.commons.lang.time.DateUtils;

public abstract class DateTools {
 private static final SimpleDateFormat yyyyMMddhhmmCn=new SimpleDateFormat("yyyy年MM月dd日 hh:ss");
 private static final SimpleDateFormat MMddhhmmCn=new SimpleDateFormat("MM月dd日 hh:ss");
 private static final SimpleDateFormat yyyyMMddCn=new SimpleDateFormat("yyyy年MM月dd日");
 private static final SimpleDateFormat yyyyMMdd=new SimpleDateFormat("yyyy-MM-dd");
 private static final String[] days={"周六","周日","周一","周二","周三","周四","周五"};
 /**
  * 解析时间
  * @param date
  * @return
  */
 public static Date parseDate(String date) {
  try {
   return DateUtils.parseDate(date, new String[] { "yyyy-MM-dd" });
  } catch (Exception er) {
   return null;
  }
 }
 /**
  * 格式化时间为yyyy年MM月dd日 hh:ss的格式
  * @param date
  * @return
  */
 public static String format2yyyyMMddhhmmCn(Date date){
  return yyyyMMddhhmmCn.format(date);
 }
 /**
  * 格式化时间为MM月dd日 hh:ss的格式
  * @param date
  * @return
  */
 public static String format2MMddhhmmCn(Date date){
  return MMddhhmmCn.format(date);
 }
 
 /**
  * 格式化时间为MM月dd日
  * @param date
  * @return
  */
 public static String format2yyyyMMddCn(Date date){
  return yyyyMMddCn.format(date);
 }
 /**
  * 格式化时间为yyyy-MM-dd
  * @param date
  * @return
  */
 public static String format2yyyyMMdd(Date date){
  return yyyyMMdd.format(date);
 }
 /**
  * 今天
  * @return
  */
 public static String getToday(){
  Calendar cal=Calendar.getInstance();
  int day=cal.get(Calendar.DAY_OF_WEEK);
  return days[day%7];
 }
 /**
  * 明天
  * @return
  */
 public static String getTomorrow(){
  Calendar cal=Calendar.getInstance();
  int day=cal.get(Calendar.DAY_OF_WEEK)+1;
  return days[day%7];
 }
 /**
  * 后天
  * @return
  */
 public static String getDayAfterTomorrow(){
  Calendar cal=Calendar.getInstance();
  int day=cal.get(Calendar.DAY_OF_WEEK)+2;
  return days[day%7];
 }
 
 /**
  * 今天日期
  * @return
  */
 public static String getTodayDate(){
  Date now=new Date();
  return format2yyyyMMdd(now);
 }
 /**
  * 明天日期
  * @return
  */
 public static String getTomorrowDate(){
  Date now=new Date();
  now=DateUtils.addDays(now, 1);
  return format2yyyyMMdd(now);
 }
 /**
  * 后天日期
  * @return
  */
 public static String getDayAfterTomorrowDate(){
  Date now=new Date();
  now=DateUtils.addDays(now, 2);
  return format2yyyyMMdd(now);
 }
}

 

原创粉丝点击