java时间管理_JAVA 时间工具类

1 packagecom.XXXXX.XXXXXXX.XXXXXXXX;2

3 importjava.sql.Timestamp;4 importjava.text.DateFormat;5 importjava.text.ParseException;6 importjava.text.SimpleDateFormat;7 importjava.util.Calendar;8 importjava.util.Date;9 importjava.util.StringTokenizer;10 importjava.util.regex.Matcher;11 importjava.util.regex.Pattern;12

13 /**

14 * 日期时间管理类.15 *

16 * Title: CicroDate17 *

18 *

19 * Description: 日期时间管理20 *

21 *

22 * Copyright: Copyright (c) 200223 *

24 *

25 * Company: Cicro26 *

27 *28 *@authorkongxx29 *@authorSunyi30 *@version1.3 *31 */

32

33 public classDateUtil {34 private static final String DATE_PATTERN = "yyyy-MM-dd";35 private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";36

37 /**

38 * 获取当前系统时间. 默认模板格式yyyy-MM-dd hh:mm:ss.39 *40 *@return当前系统时间41 */

42 public staticString getCurrentDateTime() {43 returngetCurrentDateTime(DATETIME_PATTERN);44 }45

46 /**

47 * 获取当前系统同期。48 *49 *@return当前系统日期50 *@authorzhenggz 2003-11-0951 */

52 public staticString getCurrentDate() {53 returngetCurrentDateTime(DATE_PATTERN);54 }55

56 /**

57 * 获取当前系统时间.58 *59 *@paramstrPattern60 * 时间模板61 *@return当前系统时间62 */

63 public staticString getCurrentDateTime(String pattern) {64 Calendar cal =Calendar.getInstance();65 SimpleDateFormat sdf = newSimpleDateFormat(pattern);66 returnsdf.format(cal.getTime());67 }68

69 /**

70 * 把字串转化成为Date对象,时间字串格式为2000-01-01 00:00:0071 *72 *@paramdateString73 * 被转化的时间字串,以 yyyy-MM-dd HH:mm:ss 的格式74 *@throwsParseException75 **/

76 public static Date getDate(String dateStr) throwsParseException {77 returngetDate(dateStr, DATETIME_PATTERN);78 }79

80 /**

81 * 把字串转化成为Date对象,时间字串格式需要设定82 *83 *@paramdateString84 * 被转化的时间字串85 *@parampattern86 * 时间字串的日期格式,如yyyy-MM-dd87 *@throwsParseException88 **/

89 public staticDate getDate(String dateStr, String pattern)90 throwsParseException {91 Date date = null;92 SimpleDateFormat dateFormat = newSimpleDateFormat(pattern);93 date =dateFormat.parse(dateStr);94

95 returndate;96 }97

98 /**

99 * 取得日期字串100 *101 *@paramdate102 * Date对象103 *@return日期字串,格式如:2003-12-02104 **/

105 public staticString getDateString(Date date) {106 returngetString(date, DATE_PATTERN);107 }108

109 /**

110 * 取得日期时间字串111 *112 *@paramdate113 * Date对象114 *@return日期时间字串,格式如:2003-12-02 13:10:00115 **/

116 public staticString getDateTimeString(Date date) {117 returngetString(date, DATETIME_PATTERN);118 }119

120 /**

121 * 按照指定格式取得时间字串122 *123 *@paramdate124 * Date对象125 *@parampattern126 * 时间字串的日期格式,如yyyy-MM-dd127 *@return日期时间字串,格式如:2003-12-02 13:10:00128 **/

129 public staticString getString(Date date, String pattern) {130 SimpleDateFormat dateFormat = newSimpleDateFormat(pattern);131

132 returndateFormat.format(date);133 }134

135 /**

136 * 格式化日期字串137 *138 *@paramdateStr139 *@return格式化后的字串,格式如:2003-12-02140 **/

141 public staticString formatToDateString(String dateStr)142 throwsParseException {143 returnformatToString(dateStr, DATE_PATTERN);144 }145

146 /**

147 * 格式化日期时间字串148 *149 *@paramdateTimeStr150 *@returnString 格式化后的字串,格式如:2003-12-02 12:12:10151 **/

152 public staticString formatToDateTimeString(String dateTimeStr)153 throwsParseException {154 returnformatToString(dateTimeStr, DATETIME_PATTERN);155 }156

157 /**

158 * 格式化日期时间字串为指定的格式字串159 *160 *@paramString161 * 时间字串162 *@paramString163 * 时间字串的日期格式,如yyyy-MM-dd164 *@returnString 格式化后的字串,格式如:2003-12-02 12:12:10165 **/

166 public staticString formatToString(String dateStr, String pattern)167 throwsParseException {168 dateStr =format(dateStr);169 Date date = null;170 if(checkDateString(dateStr)) {171 date =getDate(dateStr, DATE_PATTERN);172 returngetString(date, pattern);173 } else if(checkDateTimeString(dateStr)) {174 date =getDate(dateStr);175 returngetString(date, pattern);176 } else{177 throw new ParseException("日期格式不正确", 1);178 }179 }180

181 /**

182 * 检查日期字串的格式183 *184 *@paramString185 * 时间字串 YYYY-MM-DD186 *@returnboolean true or false187 **/

188 public static booleancheckDateString(String dateStr) {189 Pattern pattern = Pattern.compile("\\d{2,4}-\\d{1,2}-\\d{1,2}");190 Matcher matcher =pattern.matcher(dateStr);191

192 returnmatcher.matches();193 }194

195 /**

196 * 检查日期时间字串的格式197 *198 *@paramString199 * 时间字串 YYYY-MM-DD hh:mm:ss200 *@returnboolean true or false201 **/

202 public static booleancheckDateTimeString(String dateTimeStr) {203 Pattern pattern =Pattern204 .compile("\\d{2,4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{1,2}:\\d{1,2}");205 Matcher matcher =pattern.matcher(dateTimeStr);206

207 returnmatcher.matches();208 }209

210 /**

211 * 规范化时间字串212 *213 *@paramString214 * 时间字串215 *@returnString 格式化后的字串,格式如:2003-12-02 12:12:10216 **/

217 public staticString format(String dateStr) {218 Pattern pattern =Pattern219 .compile("\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}.*");220 Matcher matcher =pattern.matcher(dateStr);221 if(matcher.matches()) {222 dateStr = dateStr.substring(0, 19);223 } else{224 pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}.*");225 matcher =pattern.matcher(dateStr);226 if(matcher.matches()) {227 dateStr = dateStr.substring(0, 10);228 }229 }230

231 returndateStr;232 }233

234 /**

235 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法236 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法237 *238 *@paramDate239 * date 时间对象240 *@returnint 返回这日期的年份 格式如:2010241 */

242 public static intgetYear(Date date) {243 Calendar calendar =Calendar.getInstance();244 calendar.setTime(date);245 int year =calendar.get(Calendar.YEAR);246 returnyear;247 }248

249 /**

250 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法251 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法252 *253 *@paramDate254 * date 时间对象255 *@returnint 返回这日期的月份 格式如:11256 */

257 public static intgetMonth(Date date) {258 Calendar calendar =Calendar.getInstance();259 calendar.setTime(date);260 int month =calendar.get(Calendar.MONTH);261 returnmonth;262 }263

264 /**

265 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法266 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法267 *268 *@paramDate269 * date 时间对象270 *@returnint 返回这日期在当月的第几天 格式如:15271 */

272 public static intgetDayOfMonth(Date date) {273 Calendar calendar =Calendar.getInstance();274 calendar.setTime(date);275 int day =calendar.get(Calendar.DAY_OF_MONTH);276 returnday;277 }278

279 /**

280 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法281 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法282 *283 *@paramDate284 * date 时间对象285 *@returnint 返回这日期在第几周 格式如:52286 */

287 public static intgetDayOfWek(Date date) {288 Calendar calendar =Calendar.getInstance();289 calendar.setTime(date);290 int day =calendar.get(Calendar.DAY_OF_WEEK);291 returnday;292 }293

294 /**

295 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法296 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法297 *298 *@paramDate299 * date 时间对象300 *@returnint 返回这日期的小时 格式如:23301 */

302 public static intgetHour(Date date) {303 Calendar calendar =Calendar.getInstance();304 calendar.setTime(date);305 int hour =calendar.get(Calendar.HOUR_OF_DAY);306 returnhour;307 }308

309 /**

310 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法311 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法312 *313 *@paramDate314 * date 时间对象315 *@returnint 返回这日期的分钟 格式如:59316 */

317 public static intgetMinute(Date date) {318 Calendar calendar =Calendar.getInstance();319 calendar.setTime(date);320 int minute =calendar.get(Calendar.MINUTE);321 returnminute;322 }323

324 /**

325 * History 2004-08-09 Added by xiecs 增加了根据Date对象获得年,月,日等信息的方法326 * 获得某天的开始时间和结束时间,获得一周的开始时间和结束时间的方法327 *328 *@paramDate329 * date 时间对象330 *@returnint 返回这日期的秒钟 格式如:40331 */

332 public static intgetSecond(Date date) {333 Calendar calendar =Calendar.getInstance();334 calendar.setTime(date);335 int second =calendar.get(Calendar.SECOND);336 returnsecond;337 }338

339 /**

340 * 获得某天的开始时间的Date对象,一般用来作比较用341 *342 *@paramDate343 * date 时间对象344 *@returnDate345 */

346 public staticDate getStartOfDay(Date date) {347 Date startDate = null;348 try{349 startDate =DateUtil.getDate(350 DateUtil.getString(date, "yyyy-MM-dd"), "yyyy-MM-dd");351 } catch(Exception e) {352 return null;353 }354 returnstartDate;355 }356

357 /**

358 * 获得某天的结束时间的Date对象,一般用来作比较用359 *360 *@paramDate361 * date 时间对象362 *@returnDate363 */

364 public staticDate getEndOfDay(Date date) {365 Calendar calendar =Calendar.getInstance();366 Date endDate = null;367 try{368 calendar.set(DateUtil.getYear(date), DateUtil.getMonth(date),369 DateUtil.getDayOfMonth(date), 23, 59, 59);370 endDate =calendar.getTime();371 } catch(Exception e) {372 return null;373 }374 returnendDate;375 }376

377 /**

378 * 获得某天所在的星期的第一天(星期一)的开始时间(0时0分0秒)Date对象,一般用来作比较用379 *380 *@paramDate381 * date 时间对象382 *@returnDate383 */

384 public staticDate getStartOfWeek(Date date) {385 Calendar calendar =Calendar.getInstance();386 calendar.setTime(date);387 int n = 0;388 int day =calendar.get(Calendar.DAY_OF_WEEK);389 switch(day) {390 caseCalendar.MONDAY: {391 n = 0;392 break;393 }394 caseCalendar.TUESDAY: {395 n = 1;396 break;397 }398 caseCalendar.WEDNESDAY: {399 n = 2;400 break;401 }402 caseCalendar.THURSDAY: {403 n = 3;404 break;405 }406 caseCalendar.FRIDAY: {407 n = 4;408 break;409 }410 caseCalendar.SATURDAY: {411 n = 5;412 break;413 }414 caseCalendar.SUNDAY: {415 n = 6;416 break;417 }418 }419 Date monday = new Date(date.getTime() - 24 * 60 * 60 * 1000 *n);420 Date startDate =getStartOfDay(monday);421 returnstartDate;422 }423

424 /**

425 * 获得某天所在的星期的最后一天(星期天)的结束时间(23时59分59秒)Date对象,一般用来作比较用426 *427 *@paramDate428 * date 时间对象429 *@returnDate430 */

431 public staticDate getEndOfWeek(Date date) {432 Calendar calendar =Calendar.getInstance();433 calendar.setTime(date);434 int n = 0;435 int day =calendar.get(Calendar.DAY_OF_WEEK);436 switch(day) {437 caseCalendar.MONDAY: {438 n = 6;439 break;440 }441 caseCalendar.TUESDAY: {442 n = 5;443 break;444 }445 caseCalendar.WEDNESDAY: {446 n = 4;447 break;448 }449 caseCalendar.THURSDAY: {450 n = 3;451 break;452 }453 caseCalendar.FRIDAY: {454 n = 2;455 break;456 }457 caseCalendar.SATURDAY: {458 n = 1;459 break;460 }461 caseCalendar.SUNDAY: {462 n = 0;463 break;464 }465 }466 Date sunday = new Date(date.getTime() + 24 * 60 * 60 * 1000 *n);467 Date startDate =getEndOfDay(sunday);468 returnstartDate;469 }470

471 /**

472 * 判断两个日期之间相差的天数473 *474 *@paramString475 * day1 时间1 2010-01-03476 *@paramString477 * day1 时间2 2010-01-05478 *@returnlong 相差天数479 */

480 public static longdaysOf2Day(String day1, String day2) {481 try{482 day1 += " 00:00:00";483 day2 += " 00:00:00";484 long secs =secsOf2Day(day1, day2);485 return secs / (24 * 60 * 60);486 } catch(Exception e) {487 return -1;488 }489 }490

491 /**

492 * 判断两个时间之间相差的天数493 *494 *@paramString495 * day1 时间1 2010-01-03 00:00:00496 *@paramString497 * day1 时间2 2010-01-05 10:25:44498 *@returnlong 相差天数499 */

500 public static longsecsOf2Day(String day1, String day2) {501 try{502 Date date1 =getDate(day1);503 Date date2 =getDate(day2);504 long secs = Math.abs(date1.getTime() - date2.getTime()) / 1000;505 returnsecs;506 } catch(Exception e) {507 return -1;508 }509 }510

511 /**

512 * 获得到当前时间为止的天数,不足一天按一天计.513 *514 *@paramstrDateTime515 * 'yyyy-mm-dd hh:mm:ss'516 *@return天数517 */

518 public staticString getDaysToNow(String strDateTime) {519 try{520 StringTokenizer strToken = new StringTokenizer(strDateTime, " ");521 StringTokenizer strTokenDate = newStringTokenizer(522 strToken.nextToken(), "-");523 StringTokenizer strTokenTime = newStringTokenizer(524 strToken.nextToken(), ":");525 int intYear =Integer.parseInt(strTokenDate.nextToken());526 int intMonth = Integer.parseInt(strTokenDate.nextToken()) - 1;527 int intDay =Integer.parseInt(strTokenDate.nextToken());528 int intHour =Integer.parseInt(strTokenTime.nextToken());529 int intMin =Integer.parseInt(strTokenTime.nextToken());530 int intSec =Integer.parseInt(strTokenTime.nextToken());531

532 Calendar cal =Calendar.getInstance();533 cal.set(intYear, intMonth, intDay, intHour, intMin, intSec);534 long longDays = (new Date().getTime() - cal.getTimeInMillis()) / 24

535 / 60 / 60 / 1000;536 longDays = longDays == 0 ? 1: longDays;537

538 return "" +longDays;539 } catch(Exception e) {540 return "0";541 }542 }543

544 /**

545 * 比较两个时间的差值546 *547 *@paramdate1548 * yyyy-MM-dd HH:mm:ss549 *@paramdate2550 * yyyy-MM-dd HH:mm:ss551 *@returnint 小时552 */

553 public static longcompareDatetime(String date1, String date2) {554 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");555 long timestamp1 = -1;556 long timestamp2 = -1;557 //先将时间格式转换成Timestamp

558 try{559 timestamp1 = df.parse(date1).getTime() / 1000;560 timestamp2 = df.parse(date2).getTime() / 1000;561 } catch(ParseException e) {562 System.out.println("时间格式 [ " + date1 + " ] 或 [ " +date2563 + " ] 无法被解析");564 return -1;565 }566 if (timestamp1 >timestamp2)567 return (timestamp1 - timestamp2) / 3600;568 else

569 return (timestamp2 - timestamp1) / 3600;570

571 }572

573 /**

574 * 得到某个数值之后的时间575 *576 *@paramString577 * yyyy-MM-dd HH:mm:ss578 *@paramint 整数579 *@returnString yyyy-MM-dd HH:mm:ss580 */

581 public static Date getDateTimesAfter(String datetimes, intday) {582 Calendar now =Calendar.getInstance();583 try{584 now.setTime(getDate(datetimes, DATETIME_PATTERN));585 } catch(ParseException e) {586 System.out.println("时间格式 [ " + datetimes + " ] 无法被解析");587 return null;588 }589 now.set(Calendar.DATE, now.get(Calendar.DATE) +day);590 returnnow.getTime();591 }592

593 /**

594 * 得到某个数值之后的时间595 *596 *@paramString597 * yyyy-MM-dd HH:mm:ss or yyyy-MM-dd598 *@paramint 整数599 *@returnString yyyy-MM-dd600 */

601 public static Date getDateAfter(String datetimes, intday) {602 Calendar now =Calendar.getInstance();603 try{604 now.setTime(getDate(datetimes, DATE_PATTERN));605 } catch(ParseException e) {606 System.out.println("时间格式 [ " + datetimes + " ] 无法被解析");607 return null;608 }609 now.set(Calendar.DATE, now.get(Calendar.DATE) +day);610 returnnow.getTime();611 }612

613 /**

614 * 得到某个数值之前的日期615 *616 *@paramString617 * yyyy-MM-dd HH:mm:ss or yyyy-MM-dd618 *@paramint 整数619 *@returnString yyyy-MM-dd620 */

621 public static String getDateBefore(String datetimes, intday) {622 Calendar now =Calendar.getInstance();623 try{624 now.setTime(getDate(datetimes, DATE_PATTERN));625 } catch(ParseException e) {626 System.out.println("时间格式 [ " + datetimes + " ] 无法被解析");627 return null;628 }629 now.set(Calendar.DATE, now.get(Calendar.DATE) -day);630 return getString(now.getTime(), "yyyy-MM-dd");631 }632

633 /**

634 * 将某个时间的Timestamp转换成Datetime635 *636 *@paramlong 时间数值637 *@paramString638 * 时间格式 yyyy-MM-dd hh:mm:ss639 *@returnString yyyy-MM-dd hh:mm:ss640 */

641 public static String timestampToDate(longtimestamp, String format) {642 Date date = newTimestamp(timestamp);643 DateFormat df = newSimpleDateFormat(format);644 returndf.format(date);645 }646

647 /**

648 * 得到当前时间的数值649 *650 *@returnString yyyy-MM-dd hh:mm:ss651 */

652 public static longdateToTimestamp() {653 long ts =System.currentTimeMillis();654 returnts;655 }656

657 /**

658 * 得到指定时间之后的时间659 *660 *@paramString661 * time662 *@paramint num663 *@returnString yyyy-MM-dd hh:mm:ss664 */

665 public static String getDateTimeAfter(String times, intnum) {666 if (times == null || "".equals(times))667 times =getCurrentDateTime();668

669 long tl = dateToTimestamp(times) + num * 1000;670 return timestampToDate(tl, "yyyy-MM-dd HH:mm:ss");671 }672

673 /**

674 * 将某个时间的Datetime转换成Timestamp675 *676 *@paramdateFormat677 * yyyy-MM-dd HH:mm:ss678 *@returnlong679 */

680 public static longdateToTimestamp(String dateFormat) {681 long timestamp = -1;682 try{683 DateFormat df = newSimpleDateFormat(DATETIME_PATTERN);684 Date date =df.parse(dateFormat);685 timestamp =date.getTime();686 } catch(Exception e) {687 System.out.println("时间格式 [ " + dateFormat + " ] 无法被解析");688 }689 returntimestamp;690 }691

692 public static longcompareDatetime2(String date1, String date2) {693 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");694 long timestamp1 = -1;695 long timestamp2 = -1;696 //先将时间格式转换成Timestamp

697 try{698 timestamp1 =df.parse(date1).getTime();699 timestamp2 =df.parse(date2).getTime();700 } catch(ParseException e) {701 System.out.println("时间格式 [ " + date1 + " ] 或 [ " +date2702 + " ] 无法被解析");703 return -1;704 }705 if (timestamp1 >timestamp2)706 return (timestamp1 -timestamp2);707 else

708 return (timestamp2 -timestamp1);709

710 }711

712 //对比两个日期大小

713 public static booleancompare_date(String DATE1, String DATE2) {714 DateFormat df = new SimpleDateFormat("yyyy-MM-dd");715 try{716 Date dt1 =df.parse(DATE1);717 Date dt2 =df.parse(DATE2);718 if (dt1.getTime() >dt2.getTime()) {719 //System.out.println("dt1 在dt2前");

720 return false;721 } else if (dt1.getTime()

723 return true;724 } else{725 return true;726 }727 } catch(Exception exception) {728 exception.printStackTrace();729 }730 return true;731 }732

733 public static void main(String[] args) throwsException {734 //System.out.println(getDaysToNow("2010-01-10 00:00:00"));735 //System.out.println(compare_date("2011-05-16 17:50:50","2011-05-16 17:50:55"));736 //System.out.println(getDateTimesAfter("2010-01-10 12:00:00",-5));737 //System.out.println(getDateAfter("2010-01-10",-5));738 //System.out.println(timestampToDate(1262575579707L,"yyyy-MM-dd HH:mm:ss"));

739 System.out.println(compareDatetime("2012-02-02 17:36:46:673",740 "2012-02-03 18:47:37:392"));741

742 //"2010-01-20 17:58:37:319","2010-01-20 18:44:32:592" ibatis + bonecp743 //27ss744 //"2010-01-21 14:51:49:307","2010-01-21 15:47:45:794" hib + c3p0 33ss745 //"2010-01-21 17:36:46:673","2010-01-21 18:47:37:392" ibatis + c3p0746 //42ss747

748 //System.out.println(dateToTimestamp());749 //System.out.println(timestampToDate(1268231397000L-120000,"yyyy-MM-dd HH:mm:ss"));

750

751 System.out.println(DateUtil.getDateString(getDateAfter(752 "2012-02-02 17:36:46", 30)));753 }754 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值