一般情况下,编写程序,是在规定的时间内,并且在一段时间内很好的按成,那么就必须要套用现成的东西。在一个新的功能中,如何调用现成的东西呢,那么就是使用第三方包或者是使用自己总结的代码库。接来下是自己看到的一些好的代码库和自己总结的代码库。
通用库
经常被使用的到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 }
共同学习,写下你的评论
评论加载中...
作者其他优质文章