为了账号安全,请及时绑定邮箱和手机立即绑定

java里面如何提升编写速度

标签:
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 ? ms271         : (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 + cal385         .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 }

复制代码

原文出处:https://www.cnblogs.com/skyice/p/9539313.html  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消