Java时间日期格式转换
1 import java.util.*; 2 import java.text.*; 3 import java.util.Calendar; 4 5 public class VeDate { 6 /** 7 * 获取现在时间 8 * 9 * @return 返回时间类型 yyyy-MM-dd HH:mm:ss 10 */ 11 public static Date getNowDate() { 12 Date currentTime = new Date(); 13 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 14 String dateString = formatter.format(currentTime); 15 ParsePosition pos = new ParsePosition(8); 16 Date currentTime_2 = formatter.parse(dateString, pos); 17 return currentTime_2; 18 } 19 20 /** 21 * 获取现在时间 22 * 23 * @return返回短时间格式 yyyy-MM-dd 24 */ 25 public static Date getNowDateShort() { 26 Date currentTime = new Date(); 27 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 28 String dateString = formatter.format(currentTime); 29 ParsePosition pos = new ParsePosition(8); 30 Date currentTime_2 = formatter.parse(dateString, pos); 31 return currentTime_2; 32 } 33 34 /** 35 * 获取现在时间 36 * 37 * @return返回字符串格式 yyyy-MM-dd HH:mm:ss 38 */ 39 public static String getStringDate() { 40 Date currentTime = new Date(); 41 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 42 String dateString = formatter.format(currentTime); 43 return dateString; 44 } 45 46 /** 47 * 获取现在时间 48 * 49 * @return 返回短时间字符串格式yyyy-MM-dd 50 */ 51 public static String getStringDateShort() { 52 Date currentTime = new Date(); 53 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 54 String dateString = formatter.format(currentTime); 55 return dateString; 56 } 57 58 /** 59 * 获取时间 小时:分;秒 HH:mm:ss 60 * 61 * @return 62 */ 63 public static String getTimeShort() { 64 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 65 Date currentTime = new Date(); 66 String dateString = formatter.format(currentTime); 67 return dateString; 68 } 69 70 /** 71 * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss 72 * 73 * @param strDate 74 * @return 75 */ 76 public static Date strToDateLong(String strDate) { 77 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 78 ParsePosition pos = new ParsePosition(0); 79 Date strtodate = formatter.parse(strDate, pos); 80 return strtodate; 81 } 82 83 /** 84 * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss 85 * 86 * @param dateDate 87 * @return 88 */ 89 public static String dateToStrLong(java.util.Date dateDate) { 90 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 91 String dateString = formatter.format(dateDate); 92 return dateString; 93 } 94 95 /** 96 * 将短时间格式时间转换为字符串 yyyy-MM-dd 97 * 98 * @param dateDate 99 * @param k 100 * @return 101 */ 102 public static String dateToStr(java.util.Date dateDate) { 103 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 104 String dateString = formatter.format(dateDate); 105 return dateString; 106 } 107 108 /** 109 * 将短时间格式字符串转换为时间 yyyy-MM-dd 110 * 111 * @param strDate 112 * @return 113 */ 114 public static Date strToDate(String strDate) { 115 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 116 ParsePosition pos = new ParsePosition(0); 117 Date strtodate = formatter.parse(strDate, pos); 118 return strtodate; 119 } 120 121 /** 122 * 得到现在时间 123 * 124 * @return 125 */ 126 public static Date getNow() { 127 Date currentTime = new Date(); 128 return currentTime; 129 } 130 131 /** 132 * 提取一个月中的最后一天 133 * 134 * @param day 135 * @return 136 */ 137 public static Date getLastDate(long day) { 138 Date date = new Date(); 139 long date_3_hm = date.getTime() - 3600000 * 34 * day; 140 Date date_3_hm_date = new Date(date_3_hm); 141 return date_3_hm_date; 142 } 143 144 /** 145 * 得到现在时间 146 * 147 * @return 字符串 yyyyMMdd HHmmss 148 */ 149 public static String getStringToday() { 150 Date currentTime = new Date(); 151 SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss"); 152 String dateString = formatter.format(currentTime); 153 return dateString; 154 } 155 156 /** 157 * 得到现在小时 158 */ 159 public static String getHour() { 160 Date currentTime = new Date(); 161 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 162 String dateString = formatter.format(currentTime); 163 String hour; 164 hour = dateString.substring(11, 13); 165 return hour; 166 } 167 168 /** 169 * 得到现在分钟 170 * 171 * @return 172 */ 173 public static String getTime() { 174 Date currentTime = new Date(); 175 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 176 String dateString = formatter.format(currentTime); 177 String min; 178 min = dateString.substring(14, 16); 179 return min; 180 } 181 182 /** 183 * 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写。 184 * 185 * @param sformat 186 * yyyyMMddhhmmss 187 * @return 188 */ 189 public static String getUserDate(String sformat) { 190 Date currentTime = new Date(); 191 SimpleDateFormat formatter = new SimpleDateFormat(sformat); 192 String dateString = formatter.format(currentTime); 193 return dateString; 194 } 195 196 /** 197 * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式,返回字符型的分钟 198 */ 199 public static String getTwoHour(String st1, String st2) { 200 String[] kk = null; 201 String[] jj = null; 202 kk = st1.split(":"); 203 jj = st2.split(":"); 204 if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0])) 205 return "0"; 206 else { 207 double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60; 208 double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60; 209 if ((y - u) > 0) 210 return y - u + ""; 211 else 212 return "0"; 213 } 214 } 215 216 /** 217 * 得到二个日期间的间隔天数 218 */ 219 public static String getTwoDay(String sj1, String sj2) { 220 SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 221 long day = 0; 222 try { 223 java.util.Date date = myFormatter.parse(sj1); 224 java.util.Date mydate = myFormatter.parse(sj2); 225 day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); 226 } catch (Exception e) { 227 return ""; 228 } 229 return day + ""; 230 } 231 232 /** 233 * 时间前推或后推分钟,其中JJ表示分钟. 234 */ 235 public static String getPreTime(String sj1, String jj) { 236 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 237 String mydate1 = ""; 238 try { 239 Date date1 = format.parse(sj1); 240 long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60; 241 date1.setTime(Time * 1000); 242 mydate1 = format.format(date1); 243 } catch (Exception e) { 244 } 245 return mydate1; 246 } 247 248 /** 249 * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数 250 */ 251 public static String getNextDay(String nowdate, String delay) { 252 try{ 253 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 254 String mdate = ""; 255 Date d = strToDate(nowdate); 256 long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60; 257 d.setTime(myTime * 1000); 258 mdate = format.format(d); 259 return mdate; 260 }catch(Exception e){ 261 return ""; 262 } 263 } 264 265 /** 266 * 判断是否润年 267 * 268 * @param ddate 269 * @return 270 */ 271 public static boolean isLeapYear(String ddate) { 272 273 /** 274 * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年 275 * 3.能被4整除同时能被100整除则不是闰年 276 */ 277 Date d = strToDate(ddate); 278 GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance(); 279 gc.setTime(d); 280 int year = gc.get(Calendar.YEAR); 281 if ((year % 400) == 0) 282 return true; 283 else if ((year % 4) == 0) { 284 if ((year % 100) == 0) 285 return false; 286 else 287 return true; 288 } else 289 return false; 290 } 291 292 /** 293 * 返回美国时间格式 26 Apr 2006 294 * 295 * @param str 296 * @return 297 */ 298 public static String getEDate(String str) { 299 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 300 ParsePosition pos = new ParsePosition(0); 301 Date strtodate = formatter.parse(str, pos); 302 String j = strtodate.toString(); 303 String[] k = j.split(" "); 304 return k[2] + k[1].toUpperCase() + k[5].substring(2, 4); 305 } 306 307 /** 308 * 获取一个月的最后一天 309 * 310 * @param dat 311 * @return 312 */ 313 public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd 314 String str = dat.substring(0, 8); 315 String month = dat.substring(5, 7); 316 int mon = Integer.parseInt(month); 317 if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) { 318 str += "31"; 319 } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) { 320 str += "30"; 321 } else { 322 if (isLeapYear(dat)) { 323 str += "29"; 324 } else { 325 str += "28"; 326 } 327 } 328 return str; 329 } 330 331 /** 332 * 判断二个时间是否在同一个周 333 * 334 * @param date1 335 * @param date2 336 * @return 337 */ 338 public static boolean isSameWeekDates(Date date1, Date date2) { 339 Calendar cal1 = Calendar.getInstance(); 340 Calendar cal2 = Calendar.getInstance(); 341 cal1.setTime(date1); 342 cal2.setTime(date2); 343 int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR); 344 if (0 == subYear) { 345 if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) 346 return true; 347 } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) { 348 // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周 349 if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) 350 return true; 351 } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) { 352 if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) 353 return true; 354 } 355 return false; 356 } 357 358 /** 359 * 产生周序列,即得到当前时间所在的年度是第几周 360 * 361 * @return 362 */ 363 public static String getSeqWeek() { 364 Calendar c = Calendar.getInstance(Locale.CHINA); 365 String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR)); 366 if (week.length() == 1) 367 week = "0" + week; 368 String year = Integer.toString(c.get(Calendar.YEAR)); 369 return year + week; 370 } 371 372 /** 373 * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号 374 * 375 * @param sdate 376 * @param num 377 * @return 378 */ 379 public static String getWeek(String sdate, String num) { 380 // 再转换为时间 381 Date dd = VeDate.strToDate(sdate); 382 Calendar c = Calendar.getInstance(); 383 c.setTime(dd); 384 if (num.equals("1")) // 返回星期一所在的日期 385 c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 386 else if (num.equals("2")) // 返回星期二所在的日期 387 c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 388 else if (num.equals("3")) // 返回星期三所在的日期 389 c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); 390 else if (num.equals("4")) // 返回星期四所在的日期 391 c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); 392 else if (num.equals("5")) // 返回星期五所在的日期 393 c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 394 else if (num.equals("6")) // 返回星期六所在的日期 395 c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); 396 else if (num.equals("0")) // 返回星期日所在的日期 397 c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 398 return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); 399 } 400 401 /** 402 * 根据一个日期,返回是星期几的字符串 403 * 404 * @param sdate 405 * @return 406 */ 407 public static String getWeek(String sdate) { 408 // 再转换为时间 409 Date date = VeDate.strToDate(sdate); 410 Calendar c = Calendar.getInstance(); 411 c.setTime(date); 412 // int hour=c.get(Calendar.DAY_OF_WEEK); 413 // hour中存的就是星期几了,其范围 1~7 414 // 1=星期日 7=星期六,其他类推 415 return new SimpleDateFormat("EEEE").format(c.getTime()); 416 } 417 public static String getWeekStr(String sdate){ 418 String str = ""; 419 str = VeDate.getWeek(sdate); 420 if("1".equals(str)){ 421 str = "星期日"; 422 }else if("2".equals(str)){ 423 str = "星期一"; 424 }else if("3".equals(str)){ 425 str = "星期二"; 426 }else if("4".equals(str)){ 427 str = "星期三"; 428 }else if("5".equals(str)){ 429 str = "星期四"; 430 }else if("6".equals(str)){ 431 str = "星期五"; 432 }else if("7".equals(str)){ 433 str = "星期六"; 434 } 435 return str; 436 } 437 438 /** 439 * 两个时间之间的天数 440 * 441 * @param date1 442 * @param date2 443 * @return 444 */ 445 public static long getDays(String date1, String date2) { 446 if (date1 == null || date1.equals("")) 447 return 0; 448 if (date2 == null || date2.equals("")) 449 return 0; 450 // 转换为标准时间 451 SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 452 java.util.Date date = null; 453 java.util.Date mydate = null; 454 try { 455 date = myFormatter.parse(date1); 456 mydate = myFormatter.parse(date2); 457 } catch (Exception e) { 458 } 459 long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); 460 return day; 461 } 462 463 /** 464 * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间 465 * 此函数返回该日历第一行星期日所在的日期 466 * 467 * @param sdate 468 * @return 469 */ 470 public static String getNowMonth(String sdate) { 471 // 取该时间所在月的一号 472 sdate = sdate.substring(0, 8) + "01"; 473 474 // 得到这个月的1号是星期几 475 Date date = VeDate.strToDate(sdate); 476 Calendar c = Calendar.getInstance(); 477 c.setTime(date); 478 int u = c.get(Calendar.DAY_OF_WEEK); 479 String newday = VeDate.getNextDay(sdate, (1 - u) + ""); 480 return newday; 481 } 482 483 /** 484 * 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数 485 * 486 * @param k 487 * 表示是取几位随机数,可以自己定 488 */ 489 490 public static String getNo(int k) { 491 492 return getUserDate("yyyyMMddhhmmss") + getRandom(k); 493 } 494 495 /** 496 * 返回一个随机数 497 * 498 * @param i 499 * @return 500 */ 501 public static String getRandom(int i) { 502 Random jjj = new Random(); 503 // int suiJiShu = jjj.nextInt(9); 504 if (i == 0) 505 return ""; 506 String jj = ""; 507 for (int k = 0; k < i; k++) { 508 jj = jj + jjj.nextInt(9); 509 } 510 return jj; 511 } 512 513 /** 514 * 515 * @param args 516 */ 517 public static boolean RightDate(String date) { 518 519 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 520 ; 521 if (date == null) 522 return false; 523 if (date.length() > 10) { 524 sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 525 } else { 526 sdf = new SimpleDateFormat("yyyy-MM-dd"); 527 } 528 try { 529 sdf.parse(date); 530 } catch (ParseException pe) { 531 return false; 532 } 533 return true; 534 } 535 536 /*************************************************************************** 537 * //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1 538 * 以年月日中文返回 2 以横线-返回 // 3 以斜线/返回 4 以缩写不带其它符号形式返回 // 5 以点号.返回 539 **************************************************************************/ 540 public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) { 541 Date currentTime = new Date(); 542 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 543 String dateString = formatter.format(currentTime); 544 String s_nd = dateString.substring(0, 4); // 年份 545 String s_yf = dateString.substring(5, 7); // 月份 546 String s_rq = dateString.substring(8, 10); // 日期 547 String sreturn = ""; 548 roc.util.MyChar mc = new roc.util.MyChar(); 549 if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 处理空值情况 550 if (nd.equals("1")) { 551 sreturn = s_nd; 552 // 处理间隔符 553 if (format.equals("1")) 554 sreturn = sreturn + "年"; 555 else if (format.equals("2")) 556 sreturn = sreturn + "-"; 557 else if (format.equals("3")) 558 sreturn = sreturn + "/"; 559 else if (format.equals("5")) 560 sreturn = sreturn + "."; 561 } 562 // 处理月份 563 if (yf.equals("1")) { 564 sreturn = sreturn + s_yf; 565 if (format.equals("1")) 566 sreturn = sreturn + "月"; 567 else if (format.equals("2")) 568 sreturn = sreturn + "-"; 569 else if (format.equals("3")) 570 sreturn = sreturn + "/"; 571 else if (format.equals("5")) 572 sreturn = sreturn + "."; 573 } 574 // 处理日期 575 if (rq.equals("1")) { 576 sreturn = sreturn + s_rq; 577 if (format.equals("1")) 578 sreturn = sreturn + "日"; 579 } 580 } else { 581 // 不是空值,也是一个合法的日期值,则先将其转换为标准的时间格式 582 sdate = roc.util.RocDate.getOKDate(sdate); 583 s_nd = sdate.substring(0, 4); // 年份 584 s_yf = sdate.substring(5, 7); // 月份 585 s_rq = sdate.substring(8, 10); // 日期 586 if (nd.equals("1")) { 587 sreturn = s_nd; 588 // 处理间隔符 589 if (format.equals("1")) 590 sreturn = sreturn + "年"; 591 else if (format.equals("2")) 592 sreturn = sreturn + "-"; 593 else if (format.equals("3")) 594 sreturn = sreturn + "/"; 595 else if (format.equals("5")) 596 sreturn = sreturn + "."; 597 } 598 // 处理月份 599 if (yf.equals("1")) { 600 sreturn = sreturn + s_yf; 601 if (format.equals("1")) 602 sreturn = sreturn + "月"; 603 else if (format.equals("2")) 604 sreturn = sreturn + "-"; 605 else if (format.equals("3")) 606 sreturn = sreturn + "/"; 607 else if (format.equals("5")) 608 sreturn = sreturn + "."; 609 } 610 // 处理日期 611 if (rq.equals("1")) { 612 sreturn = sreturn + s_rq; 613 if (format.equals("1")) 614 sreturn = sreturn + "日"; 615 } 616 } 617 return sreturn; 618 } 619 620 public static String getNextMonthDay(String sdate, int m) { 621 sdate = getOKDate(sdate); 622 int year = Integer.parseInt(sdate.substring(0, 4)); 623 int month = Integer.parseInt(sdate.substring(5, 7)); 624 month = month + m; 625 if (month < 0) { 626 month = month + 12; 627 year = year - 1; 628 } else if (month > 12) { 629 month = month - 12; 630 year = year + 1; 631 } 632 String smonth = ""; 633 if (month < 10) 634 smonth = "0" + month; 635 else 636 smonth = "" + month; 637 return year + "-" + smonth + "-10"; 638 } 639 640 public static String getOKDate(String sdate) { 641 if (sdate == null || sdate.equals("")) 642 return getStringDateShort(); 643 644 if (!VeStr.Isdate(sdate)) { 645 sdate = getStringDateShort(); 646 } 647 // 将“/”转换为“-” 648 sdate = VeStr.Replace(sdate, "/", "-"); 649 // 如果只有8位长度,则要进行转换 650 if (sdate.length() == 8) 651 sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8); 652 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 653 ParsePosition pos = new ParsePosition(0); 654 Date strtodate = formatter.parse(sdate, pos); 655 String dateString = formatter.format(strtodate); 656 return dateString; 657 } 658 659 public static void main(String[] args) throws Exception { 660 try { 661 //System.out.print(Integer.valueOf(getTwoDay("2006-11-03 12:22:10", "2006-11-02 11:22:09"))); 662 } catch (Exception e) { 663 throw new Exception(); 664 } 665 //System.out.println("sss"); 666 }
转自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html