java里面如何提升编写速度

一般情况下,编写程序,是在规定的时间内,并且在一段时间内很好的按成,那么就必须要套用现成的东西。在一个新的功能中,如何调用现成的东西呢,那么就是使用第三方包或者是使用自己总结的代码库。接来下是自己看到的一些好的代码库和自己总结的代码库。

通用库

 经常被使用的到apache 的集中包例如apache commons的包,goole guava包,至少需要知道其中的几个关键的类如StringUtils类,这些,其他的都需要记住其中的用法。至少在StringUtils中能够完成大部分字符串的处理工作。

时间处理类

在以前较多的使用JodaTime,该库能够帮助完成很多时间处理上的问题,但java8出来之后,使用java8新的时间处理,也是很方便的,但是一般都习惯使用Date类,如何高效的完成事件的处理呢,我自己是自己总结了一个DateUtil类,其中有自己经常需要使用到的时间处理方法。

集合类库

集合是被经常使用到的一个,在工作中大多数会用到ArrayList,HashMap,HashSet,这个三个集合类,这个Apache Commons Collections库能够处理很多类需要处理的部分,我个人还建议,除了常用到的三个集合类,需要了解更多的其他集合类,并且在一些特殊的场合下使用到他们,因为其他集合类设计出来,都是适合一些特殊场合的,比常见的类处理效率更好。

加密库

Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,但是我个人还是建议自己维护一个自己的加密库,因为jdk已经提供了原生的加密算法,需要自己去封装一层,而自己维护的工具类就是将这些算法集中起来。

单元测试库

单元测试是很不被重视的一个,但是时非常重要的一个,我我在工作中常用到的测试库JUnit,Mockito和PowerMock,这三个测试库满足了大部分的情况。熟练的使用它,能够在开发过程中将单元测试覆盖率提升到一定比率,并且每次改动代码,都跑一遍单元测试,那么自己维护的代码将出现很少的错误。

 下面分享我的关于这些包的一些笔记:

guava包

  • Objects
    • 使用java原生的替换,其中包括equals和deepEquals
    • hashCode
    • hash(Objects)返回一组对象的hash值
  • Strings
    • padStart(String str,int min,char pad)str头部开始添加min个pad字段
    • padEnd(String str,int min,char pad)str的尾部填充pad字段,总长度为min
    • repeat(String str,int count)将str循环count次拼接成字符串
    • commonPrefix(String a,String b)输出前缀是一样的字符串
    • commonSuffix(String a,String b)输出后缀是一样的字符串
  • joiner
    • Joiner.on(",").skipNulls().join(Arrays.asList("join", "ice", "welcome"));已逗号进行拼接
    • Joiner.on("&").withKeyValueSeparator("=").join(map);键值对已=进行拼接,&连个值之间拼接
    • appendTo(StringBuilder builder,list);给builder进行追加拼接
  • Splitter
    • Splitter.on(",").trimResults().omitEmptyStrings().splitToList(str);已逗号进行分割并返回集合
    • Splitter.on("&").trimResults().omitEmptyStrings() .withKeyValueSeparator("=").split(str);对get连接进行分割,返回map
  • Ints
    • join(separator,arrays),返回字符串
    • indexOf(int[] array, int target)
  • Multimap 一键多值
  • Multiset 接口扩展设置有重复的元素
  • BiMap 存储map值,inverse()将键值对翻转
  • File
    • 文件处理 readLines()读取行的记录
  • EventBus 观察者

commons lang3包

  • RandomUtils 返回某个类型的随机数

  • RandomStringUtils 返回随机数字符串

    • random(15,true,false);//返回15长度,true表示保函字符串,false不保函数字
    • random(15,'abcdefgABCDEFG123456789');//从字符串中获取长度为15的随机数
    • randomAlphabetic(15);//从a-z、A-Z的选择出15随机数
    • randomAlphabetic(2,15);//最小长度是2,最大长度15
    • randomNumeric(15)//数字
  • ClassUtils 获取类名

    • getShortName() //获取短类名,如:ClassUtils
    • getClassFileName() //获取类文件名,如:ClassUtils.class
    • getPackageName() //获取包,如:org.apache.commons.lang3
    • getQualifiedName()//获取包名+类名,如:org.apache.commons.lang3.ClassUtils
  • ArrayUtils 数组的操作 array[]

    • add(array,3); //将3追加到数组后面
    • remove(array,3) //将数组下标为3的移除
    • subarray(array,1,3) //截取下标1-3的数组
    • clone() 拷贝
    • contains(array,"")//是否包含
    • index(array,""),返回保函的下标
    • isEquals(array,array1);//判断两个数组内部元素是否相等

beanutils 包

  • BeanUtils 前提条件,必须提供get/set方法

    • copyProperties(desc,src);//将src对象的值复制设置到desc对象中
    • populate(bean,Map);将对象的值映射到bean对象中
    • describe(bean)//将对象转化map
  • methondUtils 方法的集合

common-io包

  • FileUtil 与IOUtils

    • copyURLToFile(URL,file);//将url路径放入file
    • copyInputStreamToFile(input,file);//将input放入到file
    • copyToFile(intput,file);//inpout放入file
    • readFileToString(file);//将file内容读出为String
    • readFileToByteArray(file);//将file内容读出来为byte[]
    • readLines(file,"utf-8");//将file以行读出来放入集合,编码格式
    • writeStringToFile(file,str,"utf-8");//将字符串输入到file
  • FileAlterationMonitor文件监听

接下来是自己经常会用到的一个关于时间处理的类,该类中引用了slf4j-api包,用于日志输出。

  1 import java.text.SimpleDateFormat;
  2 import java.util.Calendar;
  3 import java.util.Date;
  4 import java.util.Locale;
  5 import java.util.TimeZone;
  6 import org.slf4j.Logger;
  7 import org.slf4j.LoggerFactory;
  8 
  9 /**
 10  * @author: ice
 11  * @create on:2018-04-12 23:25
 12  */
 13 public class DateUtil {
 14 
 15   private static final Logger logger = LoggerFactory.getLogger(ODateu.class);
 16 
 17   public static final long SECOND = 1 * 1000;
 18   public static final long MINUTE = 60 * SECOND;
 19   public static final long HOUR = 60 * MINUTE;
 20   public static final long DAY = 24 * HOUR;
 21   public static final long WEEK = 7 * DAY;
 22   public static final TimeZone tz = TimeZone.getDefault();
 23 
 24   /**
 25    * 入参格式: Sat Nov 01 14:01:55 CST 2014.
 26    */
 27   public static final Date parseLocale(String date) {
 28     if (date == null) {
 29       return null;
 30     }
 31     try {
 32       return new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse(date);
 33     } catch (Exception e) {
 34       if (logger.isDebugEnabled()) {
 35         logger.debug("{}, date: {}", Misc.trace(e), date);
 36       }
 37       return null;
 38     }
 39   }
 40 
 41   /**
 42    * 入参格式: yyyy.
 43    */
 44   public static final Date parseDateyyyy(String date) {
 45     if (date == null) {
 46       return null;
 47     }
 48     try {
 49       return new SimpleDateFormat("yyyy").parse(date);
 50     } catch (Exception e) {
 51       if (logger.isDebugEnabled()) {
 52         logger.debug("{}, date: {}", Misc.trace(e), date);
 53       }
 54       return null;
 55     }
 56   }
 57 
 58   /**
 59    * 入参格式: yyyy-MM.
 60    */
 61   public static final Date parseDateyyyy_MM(String date) {
 62     if (date == null) {
 63       return null;
 64     }
 65     try {
 66       return new SimpleDateFormat("yyyy-MM").parse(date);
 67     } catch (Exception e) {
 68       if (logger.isDebugEnabled()) {
 69         logger.debug("{}, date: {}", Misc.trace(e), date);
 70       }
 71       return null;
 72     }
 73   }
 74 
 75   /**
 76    * 入参格式: yyyyMMdd.
 77    */
 78   public static final Date parseDateyyyyMMdd(String date) {
 79     if (date == null) {
 80       return null;
 81     }
 82     try {
 83       return new SimpleDateFormat("yyyyMMdd").parse(date);
 84     } catch (Exception e) {
 85       if (logger.isDebugEnabled()) {
 86         logger.debug("{}, date: {}", Misc.trace(e), date);
 87       }
 88       return null;
 89     }
 90   }
 91 
 92   /**
 93    * 入参格式: yyyy-MM-dd.
 94    */
 95   public static final Date parseDateyyyy_MM_dd(String date) {
 96     if (date == null) {
 97       return null;
 98     }
 99     try {
100       return new SimpleDateFormat("yyyy-MM-dd").parse(date);
101     } catch (Exception e) {
102       if (logger.isDebugEnabled()) {
103         logger.debug("{}, date: {}", Misc.trace(e), date);
104       }
105       return null;
106     }
107   }
108 
109   /**
110    * 解析yyyyMMddHH格式的日期.
111    */
112   public static final Date parseDateyyyyMMddHH(String date) {
113     if (date == null) {
114       return null;
115     }
116     try {
117       return new SimpleDateFormat("yyyyMMddHH").parse(date);
118     } catch (Exception e) {
119       if (logger.isDebugEnabled()) {
120         logger.debug("{}, date: {}", Misc.trace(e), date);
121       }
122       return null;
123     }
124   }
125 
126   /**
127    * 解析yyyyMMddHHmm格式的日期.
128    */
129   public static final Date parseDateyyyyMMddHHmm(String date) {
130     if (date == null) {
131       return null;
132     }
133     try {
134       return new SimpleDateFormat("yyyyMMddHHmm").parse(date);
135     } catch (Exception e) {
136       if (logger.isDebugEnabled()) {
137         logger.debug("{}, date: {}", Misc.trace(e), date);
138       }
139       return null;
140     }
141   }
142 
143   /**
144    * 解析yyyyMMddHHmmss格式的日期.
145    */
146   public static final Date parseDateyyyyMMddHHmmss(String date) {
147     if (date == null) {
148       return null;
149     }
150     try {
151       return new SimpleDateFormat("yyyyMMddHHmmss").parse(date);
152     } catch (Exception e) {
153       if (logger.isDebugEnabled()) {
154         logger.debug("{}, date: {}", Misc.trace(e), date);
155       }
156       return null;
157     }
158   }
159 
160   /**
161    * 解析yyyy-MM-dd HH:mm:ss格式的日期.
162    */
163   public static final Date parseDateyyyy_MM_dd_HH_mm_ss(String date) {
164     if (date == null) {
165       return null;
166     }
167     try {
168       return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
169     } catch (Exception e) {
170       if (logger.isDebugEnabled()) {
171         logger.debug("{}, date: {}", Misc.trace(e), date);
172       }
173       return null;
174     }
175   }
176 
177   /**
178    * 返回格式: yyyy-MM-dd.
179    */
180   public static final String parseDateyyyy_MM_dd(Date date) {
181     return ODateu.parse(new SimpleDateFormat("yyyy-MM-dd"), date);
182   }
183 
184   /**
185    * 返回格式: yyyy-MM.
186    */
187   public static final String parseDateyyyy_MM(Date date) {
188     return ODateu.parse(new SimpleDateFormat("yyyy-MM"), date);
189   }
190 
191   /**
192    * 返回格式:yyyy-MM-dd HH:mm:ss.
193    */
194   public static final String parseDateyyyyMMddHHmmss(Date date) {
195     return ODateu.parse(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), date);
196   }
197 
198   /**
199    * 返回格式:yyyy/MM/dd HH:mm.
200    */
201   public static final String parseDateyyyyMMddHHmm2(Date date) {
202     return ODateu.parse(new SimpleDateFormat("yyyy/MM/dd HH:mm"), date);
203   }
204 
205   /**
206    * 返回格式:yyyyMMdd.
207    */
208   public static final String parseDateyyyyMMdd(Date date) {
209     return ODateu.parse(new SimpleDateFormat("yyyyMMdd"), date);
210   }
211 
212   /**
213    * 返回格式:yyyyMMddHH.
214    */
215   public static final String parseDateyyyyMMddHH(Date date) {
216     return ODateu.parse(new SimpleDateFormat("yyyyMMddHH"), date);
217   }
218 
219   /**
220    * 返回格式:yyyyMMddHHmmss.
221    */
222   public static final String parseDateyyyyMMddHHmmss2(Date date) {
223     return ODateu.parse(new SimpleDateFormat("yyyyMMddHHmmss"), date);
224   }
225 
226   /**
227    * 返回格式:yyyyMMddHHmm.
228    */
229   public static final String parseDateyyyyMMddHHmm(Date date) {
230     return ODateu.parse(new SimpleDateFormat("yyyyMMddHHmm"), date);
231   }
232 
233   /**
234    * 返回格式:MMddHHmmss.
235    */
236   public static final String parseDateMMddHHmmss(Date date) {
237     return ODateu.parse(new SimpleDateFormat("MMddHHmmss"), date);
238   }
239 
240   /**
241    * 返回格式:HH:mm:ss.
242    */
243   public static final String parseDateHHmmss(Date date) {
244     return ODateu.parse(new SimpleDateFormat("HH:mm:ss"), date);
245   }
246 
247   /**
248    * 返回格式: HH:mm:ss.ms.
249    */
250   public static final String parseDateHHmmssms(Date date) {
251     long ms = date.getTime() % 1000;
252     return ODateu.parse(new SimpleDateFormat("HH:mm:ss"), date) + "."
253         + (ms > 99 ? ms : (ms > 9 ? ("0" + ms) : ("00" + ms)));
254   }
255 
256   /**
257    * 返回格式:yyyy-MM-dd HH:mm:ss.ms.
258    */
259   public static final String parseDateyyyyMMddHHmmssms(Date date) {
260     long ms = date.getTime() % 1000;
261     return ODateu.parse(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), date) + "."
262         + (ms > 99 ? ms : (ms > 9 ? ("0" + ms) : ("00" + ms)));
263   }
264 
265   /**
266    * 返回格式:yyyyMMddHHmmssms.
267    */
268   public static final String parseDateyyyyMMddHHmmssms2(Date date) {
269     long ms = date.getTime() % 1000;
270     return ODateu.parseDateyyyyMMddHHmmss2(date) + (ms > 99 ? ms
271         : (ms > 9 ? ("0" + ms) : ("00" + ms)));
272   }
273 
274   /**
275    * 置为凌晨00:00:00 000,Calendar提供的set函数.
276    */
277   public static final Date set000000(Date date) {
278     Calendar cal = Calendar.getInstance();
279     cal.setTimeInMillis(date.getTime() - (date.getTime() % 1000));
280     cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0,
281         0);
282     return cal.getTime();
283   }
284 
285   /**
286    * 当前时间的hour, 小于10时前面补零.
287    */
288   public static final String hour(Date date) {
289     Calendar cal = Calendar.getInstance();
290     cal.setTime(date);
291     int hour = cal.get(Calendar.HOUR_OF_DAY);
292     return hour > 9 ? hour + "" : "0" + hour;
293   }
294 
295   /**
296    * 返回秒(0 ~ 59).
297    */
298   public static final int secondInt(Date date) {
299     Calendar cal = Calendar.getInstance();
300     cal.setTime(date);
301     return cal.get(Calendar.SECOND);
302   }
303 
304   /**
305    * 返回分钟(0 ~ 59).
306    */
307   public static final int minuteInt(Date date) {
308     Calendar cal = Calendar.getInstance();
309     cal.setTime(date);
310     return cal.get(Calendar.MINUTE);
311   }
312 
313   /**
314    * 返回小时(0 ~ 23).
315    */
316   public static final int hourInt(Date date) {
317     Calendar cal = Calendar.getInstance();
318     cal.setTime(date);
319     return cal.get(Calendar.HOUR_OF_DAY);
320   }
321 
322   /**
323    * 返回天.
324    */
325   public static final int dayInt(Date date) {
326     Calendar cal = Calendar.getInstance();
327     cal.setTime(date);
328     return cal.get(Calendar.DAY_OF_MONTH);
329   }
330 
331   /**
332    * 返回星期.
333    */
334   public static final int weekInt(Date date) {
335     Calendar cal = Calendar.getInstance();
336     cal.setTime(date);
337     return cal.get(Calendar.WEEK_OF_YEAR);
338   }
339 
340   /**
341    * 星期几? (周期一返回1, 星期天返回7).
342    */
343   public static final int week(Date date) {
344     Calendar cal = Calendar.getInstance();
345     cal.setTime(date);
346     int week = cal.get(Calendar.DAY_OF_WEEK);
347     week -= 1;
348     return week < 1 ? 7 : week;
349   }
350 
351   /**
352    * 返回月份.
353    */
354   public static final int monthInt(Date date) {
355     Calendar cal = Calendar.getInstance();
356     cal.setTime(date);
357     return cal.get(Calendar.MONTH) + 1;
358   }
359 
360   /**
361    * 返回年份.
362    */
363   public static final int yearInt(Date date) {
364     Calendar cal = Calendar.getInstance();
365     cal.setTime(date);
366     return cal.get(Calendar.YEAR);
367   }
368 
369   /**
370    * yyyymm整数形式.
371    */
372   public static final int yyyymm(Date date) {
373     Calendar cal = Calendar.getInstance();
374     cal.setTime(date);
375     return cal.get(Calendar.YEAR) * 100 + (cal.get(Calendar.MONTH) + 1);
376   }
377 
378   /**
379    * yyyymmdd整数形式.
380    */
381   public static final int yyyymmdd(Date date) {
382     Calendar cal = Calendar.getInstance();
383     cal.setTime(date);
384     return cal.get(Calendar.YEAR) * 10000 + (cal.get(Calendar.MONTH) + 1) * 100 + cal
385         .get(Calendar.DAY_OF_MONTH);
386   }
387 
388   /**
389    * 返回这个月的总天数.
390    */
391   public static final int monthDays(Date date) {
392     Calendar cal = Calendar.getInstance();
393     cal.setTime(date);
394     return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
395   }
396 
397   /**
398    * 返回这个月的最后一天(时分秒跟随).
399    */
400   public static final Date montheLastDay(Date date) {
401     Calendar cal = Calendar.getInstance();
402     cal.setTime(date);
403     Calendar ret = Calendar.getInstance();
404     ret.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
405         cal.getActualMaximum(Calendar.DAY_OF_MONTH),
406         cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
407     return ret.getTime();
408   }
409 
410   /**
411    * 返回这个月的第一天(00:00:00).
412    */
413   public static final Date monthFirstDay000000(Date date) {
414     Calendar cal = Calendar.getInstance();
415     cal.setTime(date);
416     Calendar ret = Calendar.getInstance();
417     ret.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
418         cal.getActualMinimum(Calendar.DAY_OF_MONTH), 0, 0, 0);
419     return ret.getTime();
420   }
421 
422   /**
423    * 返回这个月的最后一天(23:59:59).
424    */
425   public static final Date monthLastDay235959(Date date) {
426     Calendar cal = Calendar.getInstance();
427     cal.setTime(date);
428     Calendar ret = Calendar.getInstance();
429     ret.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
430         cal.getActualMaximum(Calendar.DAY_OF_MONTH), 23, 59,
431         59);
432     return ret.getTime();
433   }
434 
435   /**
436    * 返回这一年的第一天(00:00:00).
437    */
438   public static final Date yearFirstDay000000(Date date) {
439     Calendar cal = Calendar.getInstance();
440     cal.setTime(date);
441     Calendar ret = Calendar.getInstance();
442     ret.set(cal.get(Calendar.YEAR), cal.getActualMinimum(Calendar.MONTH),
443         cal.getActualMinimum(Calendar.DAY_OF_MONTH), 0, 0, 0);
444     return ret.getTime();
445   }
446 
447   /**
448    * 返回这一年的最后一天(23:59:59).
449    */
450   public static final Date yearLastDay235959(Date date) {
451     Calendar cal = Calendar.getInstance();
452     cal.setTime(date);
453     Calendar ret = Calendar.getInstance();
454     ret.set(cal.get(Calendar.YEAR), cal.getActualMaximum(Calendar.MONTH),
455         cal.getActualMaximum(Calendar.DAY_OF_MONTH), 23, 59, 59);
456     return ret.getTime();
457   }
458 
459   /**
460    * 获取当前系统时区.
461    */
462   public static final int getTimezone() {
463     return (int) (ODateu.tz.getRawOffset() / ODateu.HOUR);
464   }
465 
466   /**
467    * 将本地时间转换成指定时区的时间.
468    */
469   public static final long changeLocalTimeZone(long ts /* 本地时间, 毫秒. */,
470       int gmt /* 指定时区偏移, 小时 . */) {
471     return (ts - ODateu.tz.getRawOffset() /* 回归零时区. */) + (gmt * ODateu.HOUR);
472   }
473 
474   /**
475    * 将本地时间转换成指定时区的时间.
476    */
477   public static final Date changeLocalTimeZone2date(long ts /* 本地时间, 毫秒. */,
478       int gmt /* 指定时区偏移, 小时 . */) {
479     return new Date(ODateu.changeLocalTimeZone(ts, gmt));
480   }
481 
482   /**
483    * 返回当前时间在零时区的绝对时间.
484    */
485   public static final Date nowGmt0() {
486     return new Date(System.currentTimeMillis() - ODateu.tz.getRawOffset() /* 回归零时区. */);
487   }
488 
489   /**
490    * 将指定GM+0时间回归到GMT+x.
491    */
492   public static final Date gotoGmtxOld(Date date /* 具有gmt0时区的绝对时间. */, int gmt /* 要返回的时区. */) {
493     return new Date(date.getTime() + gmt * ODateu.HOUR);
494   }
495 
496   /**
497    * 将指定时间回归到GMT+0.
498    */
499   public static final Date gotoGmt0Old(Date date /* 具有gmt时区的绝对时间. */, int gmt /* date的时区. */) {
500     return new Date((date.getTime() - gmt * ODateu.HOUR));
501   }
502 
503   /**
504    * 将本地时区绝对时间转换成目标时区的绝对时间.
505    */
506   public static final Date gotoGmtx(long ts /* 本时绝对时间. */, int gmtSec /* 要返回的时区(秒) */) {
507     return new Date(
508         (ts - ODateu.tz.getRawOffset() /* 去零时区. */) + (gmtSec * ODateu.SECOND /* 去目标时区. */));
509   }
510 
511   /**
512    * 将指定GMT+x时间回归到GMT+0.
513    */
514   public static final Date gmtxGoto0(Date date /* 具有gmtSec时区的绝对时间. */, int gmtSec /* date的时区. */) {
515     return new Date((date.getTime() - gmtSec * ODateu.SECOND));
516   }
517 
518   /**
519    * 将指定GM+0时间回归到GMT+x.
520    */
521   public static final Date gmt0Gotox(Date date /* 具有gmt0时区的绝对时间. */, int gmtSec /* 要返回的时区(秒). */) {
522     return new Date(date.getTime() + gmtSec * ODateu.SECOND);
523   }
524 
525   /**
526    * 本地时间去零时区.
527    */
528   public static final Date gotoGmt0(Date date /* 具有本地时区的时间 */) {
529     return new Date(date.getTime() - ODateu.tz.getRawOffset());
530   }
531 
532   /**
533    * 零时区时间去本地时区.
534    */
535   public static final Date gotoLocal(Date date/* 具有0时区的时间. */) {
536     return new Date(date.getTime() + ODateu.tz.getRawOffset());
537   }
538 
539   /**
540    * 判断两个日期是否在同一天.
541    */
542   public static final boolean isSameDay(Date arg0, Date arg1) {
543     return (ODateu.yearInt(arg0) == ODateu.yearInt(arg1)) && //
544         (ODateu.monthInt(arg0) == ODateu.monthInt(arg1)) && //
545         (ODateu.dayInt(arg0) == ODateu.dayInt(arg1));
546   }
547 
548   /**
549    * 构造一个给定的时间.
550    */
551   public static final Date createDate(int year, int month, int day, int hourOfDay, int minute,
552       int second) {
553     Calendar cal = Calendar.getInstance();
554     cal.set(year, month, day, hourOfDay, minute, second);
555     return cal.getTime();
556   }
557 
558   /**
559    * 时间滚动, 按秒钟, up == true向今后滚动, 否则向以前滚动.
560    */
561   public static final Date dateRollOfSecond(Date date, int amount, boolean up) {
562     return up ? new Date(date.getTime() + ((long) amount) * ODateu.SECOND)
563         : new Date(date.getTime() - ((long) amount) * ODateu.SECOND);
564   }
565 
566   /**
567    * 时间滚动, 按分钟, up == true向今后滚动, 否则向以前滚动.
568    */
569   public static final Date dateRollOfMinute(Date date, int amount, boolean up) {
570     return up ? new Date(date.getTime() + ((long) amount) * ODateu.MINUTE)
571         : new Date(date.getTime() - ((long) amount) * ODateu.MINUTE);
572   }
573 
574   /**
575    * 时间滚动, 按小时, up == true向今后滚动, 否则向以前滚动.
576    */
577   public static final Date dateRollOfHour(Date date, int amount, boolean up) {
578     return up ? new Date(date.getTime() + ((long) amount) * ODateu.HOUR)
579         : new Date(date.getTime() - ((long) amount) * ODateu.HOUR);
580   }
581 
582   /**
583    * 时间滚动, 按天, up == true向今后滚动, 否则向以前滚动.
584    */
585   public static final Date dateRollOfDay(Date date, int amount, boolean up) {
586     return up ? new Date(date.getTime() + ((long) amount) * ODateu.DAY)
587         : new Date(date.getTime() - ((long) amount) * ODateu.DAY);
588   }
589 
590   /**
591    * 时间滚动, 按月, up == true向今后滚动, 否则向以前滚动.
592    */
593   public static final Date dateRollOfMonth(Date date, boolean up) {
594     Calendar ca = Calendar.getInstance();
595     ca.setTime(date);
596     ca.roll(Calendar.MONTH, up);
597     int m = ODateu.monthInt(date);
598     if (m == 1 && !up) {
599       ca.roll(Calendar.YEAR, false);
600     }
601     if (m == 12 && up) {
602       ca.roll(Calendar.YEAR, true);
603     }
604     return ca.getTime();
605   }
606 
607   /**
608    * 时间滚动, 按年, up == true向今后滚动, 否则向以前滚动.
609    */
610   public static final Date dateRollOfYear(Date date, boolean up) {
611     Calendar ca = Calendar.getInstance();
612     ca.setTime(date);
613     ca.roll(Calendar.YEAR, up);
614     return ca.getTime();
615   }
616 
617   /**
618    * 清除分钟.
619    */
620   public static final Date clearMinute(Date date) {
621     return new Date(date.getTime() - (date.getTime() % ODateu.HOUR));
622   }
623 
624   /**
625    * 清除小时.
626    */
627   public static final Date clearHour(Date date) {
628     return ODateu.set000000(date);
629   }
630 
631   /**
632    * 秒转换为毫秒, 出现这个函数的原因时, 当前时间的秒数 * 1000后总是整数(4字节)溢出, 此函数则可避免出错.
633    */
634   public static final long sec2msec(long sec) {
635     return sec * 1000L;
636   }
637 
638   /**
639    * 按格式解析日期.
640    */
641   private static final String parse(SimpleDateFormat format, Date date) {
642     try {
643       return date == null ? null : format.format(date);
644     } catch (Exception e) {
645       if (logger.isDebugEnabled()) {
646         logger.debug("{}", Misc.trace(e));
647       }
648       return null;
649     }
650   }
651 }

 

posted @ 2018-09-20 12:36  冰魄秋雨  阅读(1092)  评论(0编辑  收藏  举报