天天看點

時間工具類,主要用于sql的時間段查詢

 該類主要服務于sql中基于時間的統計查詢,在寫sql的過程中建議不要使用to_char或者to_date等oracle函數這樣不利用索引(除非你對to_char進行了類似索引的操作),比如:在表的logintime字段上建立了索引,但是在sql中使用to_char(logintime,'yyyy-MM-dd')作為檢索條件的時候,資料庫在logintime上建立的索引就沒用了。在資料量很大的時候會影響檢索的速度。 

   該類提供如下方法: 

   1、擷取系統按天截取時間 getSystemTranceDay(); 

   2、根據指定時間提供天、周、旬、月、季度、年的開始時間,結束時間(時間格式采java.util.Date),以Date數組的形式傳回開始和結束時間。 

   3、給定字元串類型的startTime和endTime,工具類負責類型的轉換(String轉換成Date) 

   注意: 

   1、在sql中使用開始時間和最後時間的時候,為了保證統計資料的正确性, 

     sql按給出的例子組織:t.logintime >= startTime and t.loginTime <= entTime 

   2、時間的字元串格式采用 yyyy-MM-dd 

   3、使用該類的時候,注意傳回結果的正确性,雖然單元測試通過,還是擔心有資料不正确的問題。 

   4、工具類以附件形式提供。 

Java代碼  

時間工具類,主要用于sql的時間段查詢
  1. import java.text.ParseException;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Calendar;  
  4. import java.util.Date;  
  5. import java.util.regex.Matcher;  
  6. import java.util.regex.Pattern;  
  7. import java.util.zip.DataFormatException;  
  8. import org.apache.commons.lang.time.DateUtils;  
  9. import com.pengsy.commons.stringutil.StringUtil;  
  10. public final class DateUtil {  
  11.     private static SimpleDateFormat sDateFormat = new SimpleDateFormat(  
  12.             "yyyy-MM-dd");  
  13.     public static final int FIRSTTEN = 1 ;  
  14.     public static final int MIDTEN = 2;  
  15.     public static final int LASTTEN = 3;  
  16.     public static final int FIRSTQUARTER = 1;  
  17.     public static final int SECONDQUARTER = 2;  
  18.     public static final int THIRDQUARTER = 3;  
  19.     public static final int FORTHQUARTER = 4;  
  20.     private static Pattern pattern = Pattern  
  21.             .compile("^[1-9]\\d{3}-[01]?\\d-[0|1|2|3]?\\d$"); // 2010-12-22  
  22.     public static Date getSystemTranceDay(){  
  23.         return DateUtils.truncate(new Date(), Calendar.DATE);  
  24.     }  
  25.     public static Date[] getDateArrByDay(Date appointDate){  
  26.         Date stime = null;  
  27.         Date etime = null;  
  28.         Date[] date = new Date[2];  
  29.         //未完  
  30.         if(appointDate == null){  
  31.             appointDate = new Date();  
  32.         }  
  33.         stime = DateUtils.truncate(appointDate,Calendar.DATE);  
  34.         etime = DateUtils.addSeconds(DateUtils.truncate(DateUtils.addDays(appointDate, 1), Calendar.DATE),-1);  
  35.         date[0] = stime;  
  36.         date[1] = etime;  
  37.         return date;  
  38.     }  
  39.     public static Date[] getDateArrByWeek(Date appointDate){  
  40.         Date stime = null;  
  41.         Date etime = null;  
  42.         Date[] date = new Date[2];  
  43.         if(appointDate == null){  
  44.             appointDate = new Date();  
  45.         }  
  46.         Calendar calendar = Calendar.getInstance();  
  47.         calendar.setTime(appointDate);  
  48.         int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);  
  49.         System.out.println(dayOfWeek);  
  50.         calendar.add(Calendar.DAY_OF_MONTH, -dayOfWeek+2);  
  51.         stime = DateUtils.truncate(calendar.getTime(), Calendar.DATE);  
  52.         calendar.add(Calendar.DAY_OF_MONTH, 7);  
  53.         etime = DateUtils.addSeconds(DateUtils.truncate(calendar.getTime(), Calendar.DATE), -1);  
  54.         date[0] = stime;  
  55.         date[1] = etime;  
  56.         return date;  
  57.     }  
  58.     public static Date[] getDateArrByTenDays(Date appointDate,int appointIndex ){  
  59.         Date stime = null;  
  60.         Date etime = null;  
  61.         Date[] date = new Date[2];  
  62.         if(appointDate == null){  
  63.             appointDate = new Date();  
  64.         }  
  65.         //init date  
  66.         Calendar calendar = Calendar.getInstance();  
  67.         calendar.setTime(appointDate);  
  68.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);  
  69.         int maxDayOfMonth = calendar.getMaximum(Calendar.DAY_OF_MONTH);  
  70.         Date tempDate = DateUtils.truncate(DateUtils.addDays(appointDate, -dayOfMonth + 1), Calendar.DATE);  
  71.         if(appointIndex == FIRSTTEN){  
  72.             stime = tempDate;  
  73.             etime = DateUtils.addSeconds(DateUtils.addDays(stime, 10), -1);  
  74.         }  
  75.         if(appointIndex == MIDTEN){  
  76.             stime = DateUtils.addDays(tempDate, 10);  
  77.             etime = DateUtils.addSeconds(DateUtils.addDays(stime, 10), -1);  
  78.         }  
  79.         if(appointIndex == LASTTEN){  
  80.             stime = DateUtils.addDays(tempDate, 20);  
  81.             etime = DateUtils.addSeconds(DateUtils.addDays(tempDate, maxDayOfMonth), -1);  
  82.         }  
  83.         date[0] = stime;  
  84.         date[1] = etime;   
  85.         return date;  
  86.     }  
  87.     public static Date[] getDateArrByMonth(Date appointDate){  
  88.         Date stime = null;  
  89.         Date etime = null;  
  90.         Date[] date = new Date[2];  
  91.         if(appointDate == null){  
  92.             appointDate = new Date();  
  93.         }  
  94.         //init date  
  95.         Calendar calendar = Calendar.getInstance();  
  96.         calendar.setTime(appointDate);  
  97.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);  
  98.         int maxDayOfMonth = calendar.getMaximum(Calendar.DAY_OF_MONTH);  
  99.         appointDate = DateUtils.truncate(appointDate, Calendar.DATE);  
  100.         stime = DateUtils.truncate(DateUtils.addDays(appointDate, -dayOfMonth+1), Calendar.DATE);  
  101.         etime = DateUtils.addSeconds(DateUtils.addDays(stime, maxDayOfMonth), -1);  
  102.         date[0] = stime;  
  103.         date[1] = etime;  
  104.         return date;  
  105.     }  
  106.     public static Date[] getDateArrByQuarter(Date appointDate,int appointIndex) throws IllegalArgumentException{  
  107.         Date stime = null;  
  108.         Date etime = null;  
  109.         Date[] date = new Date[2];  
  110.         if(appointDate == null){  
  111.             appointDate = new Date();  
  112.         }  
  113.         int month = appointDate.getMonth();  
  114.         Date tempDate = DateUtils.truncate(appointDate, Calendar.YEAR);  
  115.         if(appointIndex == FIRSTQUARTER){  
  116.             stime = tempDate;  
  117.         }else if(appointIndex == SECONDQUARTER){  
  118.             stime = DateUtils.addMonths(tempDate, 3);  
  119.         }else if(appointIndex == THIRDQUARTER ){  
  120.             stime = DateUtils.addMonths(tempDate, 6);  
  121.         }else if(appointIndex == FORTHQUARTER){  
  122.             stime = DateUtils.addMonths(tempDate, 9);  
  123.         }  
  124.         etime = DateUtils.addSeconds(DateUtils.addMonths(stime, 3), -1);  
  125.         date[0] = stime;  
  126.         date[1] = etime;  
  127.         return date;  
  128.     }  
  129.     public static Date[] getDateArrByYear(Date appointDate){  
  130.         Date stime = null;  
  131.         Date etime = null;  
  132.         Date[] date = new Date[2];  
  133.         if(appointDate == null){  
  134.             appointDate = new Date();  
  135.         }  
  136.         stime = DateUtils.truncate(appointDate, Calendar.YEAR);  
  137.         etime = DateUtils.addSeconds(DateUtils.addYears(stime, 1), -1);  
  138.         date[0] = stime;  
  139.         date[1] = etime;  
  140.         return date;  
  141.     }  
  142.     public static Date[] convertDateClass(String startTime, String endTime)  
  143.             throws NullPointerException, DataFormatException, ParseException {  
  144.         Date stime = null;  
  145.         Date etime = null;  
  146.         Date[] date = new Date[2];  
  147.         if (StringUtil.isEmpty(startTime) && StringUtil.isEmpty(endTime)) {  
  148.             throw new NullPointerException("兩個參數不能同時為空");  
  149.         }  
  150.         if (StringUtil.isEmpty(startTime) && !StringUtil.isEmpty(endTime)) {  
  151.             // 先判斷endTime格式是否正确  
  152.             Matcher matcher = pattern.matcher(endTime);  
  153.             if (matcher.matches()) {  
  154.                 stime = DateUtils.truncate(new Date(), Calendar.DATE); // 當天的開始時間,比如:目前時間為2010-12-27 11:31:30 這裡stime的時間是2010-12-27 0:0:0  
  155.                 etime = DateUtils.truncate(sDateFormat.parse(endTime),Calendar.DATE);  
  156.             } else {  
  157.                 throw new DataFormatException(  
  158.                         "參數endTime的格式不正确!正确的格式 yyyy-MM-dd 比如:2010-12-12!");  
  159.             }  
  160.         }  
  161.         if (!StringUtil.isEmpty(startTime) && StringUtil.isEmpty(endTime)) {  
  162.             Matcher matcher = pattern.matcher(startTime);  
  163.             if (matcher.matches()) {  
  164.                 // 提供轉換  
  165.                 etime = DateUtils.truncate(new Date(), Calendar.DATE); // 當天的開始時間,比如:目前時間為2010-12-27 11:31:30 這裡stime的時間是2010-12-27 0:0:0  
  166.                 stime = DateUtils.truncate(sDateFormat.parse(startTime),Calendar.DATE);  
  167.             } else {  
  168.                 throw new DataFormatException(  
  169.                         "參數startTime的格式不正确!正确的格式 yyyy-MM-dd 比如:2010-12-12!");  
  170.             }  
  171.         }  
  172.         if (!StringUtil.isEmpty(startTime) && !StringUtil.isEmpty(endTime)) {  
  173.             Matcher sMatcher = pattern.matcher(startTime);  
  174.             Matcher eMatcher = pattern.matcher(endTime);  
  175.             if (sMatcher.matches() && eMatcher.matches()) {  
  176.                 stime = DateUtils.truncate(sDateFormat.parse(startTime),  
  177.                         Calendar.DATE);  
  178.                 etime = DateUtils.truncate(sDateFormat.parse(endTime),  
  179.                         Calendar.DATE);  
  180.             } else {  
  181.                 throw new DataFormatException(  
  182.                         "請檢查參數startTime、endTime的格式是否正确!正确的格式 yyyy-MM-dd 比如:2010-12-12!");  
  183.             }  
  184.         }  
  185.         if (!stime.before(etime)) {  
  186.             Date temp = stime;  
  187.             stime = etime;  
  188.             etime = temp;  
  189.             temp = null;  
  190.         }  
  191.         date[0] = stime;  
  192.         date[1] = etime;  
  193.         return date;  
  194.     }  
  195. }  
  • commons-dateutil-1.0.1.jar (12.5 KB)
  • 下載下傳次數: 171

繼續閱讀