java類中日期增加一天或一月的方法 – JAVA編程語言程序開發技術文章

最近在修改用到Hibernate的項目,遇到一個小問題,由於Hibernate自帶的查詢方法是將日期以Date格式傳遞給查詢語句的參數

如:

   // 日期范圍—-組合查詢語句
   if (!dateBegin.equals("")     &&   !dateEnd.equals(""))
   {
           str +=  "  and  s.DLendDate >= :dateBegin   and s.DLendDate <= :dateEnd ";

   }

 

   // 日期范圍—-對應參數置入
   if (!dateBegin.equals("")     &&   !dateEnd.equals(""))
   {
         query.setDate("dateBegin",  CommonUtil.strToDate(dateBegin));
         query.setDate("dateEnd", CommonUtil.strToEndDate(dateBegin));
   }

 

以上關鍵是在兩個字符轉換成日期的方法中,如果都調用CommonUtil.strToDate()方法是查詢不到結果的

原因如下:

 public static Date strToDate(String szDate)
 {
      try
      {
            if (isStringDate(szDate))
            {
                SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
                Date date = fmt.parse(szDate);
                System.out.println(szDate + " ==> " + date);   //  2011-12-23 ==> Fri Dec 23 00:00:00 GMT 2011  (打印結果)
               return date;
            }
      }catch (Exception e) {
            e.printStackTrace();
      }
            return null;
 }

 

需要另外寫一個結束日期獲取的方法(在原有日期上加一天)

public static Date strToEndDate(String szDate)
 {
         try
         {
                  if (isStringDate(szDate))
                  {
                      szDate = addDay(szDate, 1);
                      SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
                      Date date = fmt.parse(szDate);
                      System.out.println(szDate + " ==> " + date);//  2011-12-24 ==> Fri Dec 23 00:00:00 GMT 2011  (打印結果)

                      return date;
                 }
         }catch (Exception e){
              e.printStackTrace();
         }
             return null;
 }

 

   //實現日期加一天的方法
    public static String addDay(String s, int n) {   
        try {   
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
  
                 Calendar cd = Calendar.getInstance();   
                 cd.setTime(sdf.parse(s));   
                 cd.add(Calendar.DATE, n);//增加一天   
                 //cd.add(Calendar.MONTH, n);//增加一個月   
  
                 return sdf.format(cd.getTime());   
       
             } catch (Exception e) {   
                 return null;   
             }   
     }  

這樣就能解決查詢無結果的情況,同時我還測試過將日期格式轉換成包含時分秒的方法,不過沒有成功(不知道為啥)

摘自 xuliangwen的專欄

發佈留言