1 // package com.util;
  2
  3 import  java.util.Calendar;
  4 import  java.util.GregorianCalendar;
  5 import  java.util.Date;
  6 import  java.util.regex.Pattern;
  7 import  com.util.StringEx;
  8 /**
  9  * DateTime.java
 10  *  @author  §狂风依剑§ [ 2006年8月16日, 上午11:11 ]
 11   */
 
 12  
 13   /* <<<补充说明>>>
 14   *其中的getString()函数是 com.util.StringEx 里的一个补“0”的函数,根据第二个数值补“0”。
 15   *如getString(str,3)就是当str不足3位时在前面补“0”
 16 */

 17 public   class  DateTime
 18 {
 19 String dtimes = "" ;
 20 static  Calendar cal  =   new  GregorianCalendar();
 21
 22
 23 public   static   void  main(String[] args) {
 24     System.out.println(DateTime.getYMD( " 2111年20月20日 " ));
 25 }

 26
 27 // ================================================== [[[ 构造函数部分 ]]] ==================================================
 28
 29 /**
 30  *构造函数 直接返回一个默认的日期时间 [格式:YYYYMMDDHHMMSS]
 31 */

 32      public  DateTime()
 33      {
 34         dtimes = this .getDateTime();
 35     }

 36 /**
 37  *重写toString方法 用于输出默认构造的日期时间
 38  * @return  String
 39 */

 40      public  String toString()
 41      {
 42          return   this .dtimes;
 43     }

 44
 45 // ================================================== [[[ 单功能函数 ]]] ==================================================
 46
 47 /**
 48  *年份函数 返回当前年份
 49  * @return  String
 50 */

 51      public   static   int  getYear()
 52      {
 53          return  cal.get( 1 );
 54     }

 55 /**
 56  *月份函数 返回当前月份
 57  * @return  String
 58 */

 59      public   static   int  getMonth()
 60      {
 61          return  cal.get( 2 ) + 1 ;
 62     }

 63 /**
 64  *年份函数 返回当前年份
 65  * @return  String
 66 */

 67      public   static   int  getDay()
 68      {
 69          return  cal.get( 5 );
 70     }

 71 /**
 72  *时间函数 返回当前时间的时钟值
 73  * @return  String
 74 */

 75      public   static   int  getHour()
 76      {
 77          return  cal.get( 11 );
 78     }

 79 /**
 80  *时间函数 返回当前时间的分钟值
 81  * @return  String
 82 */

 83      public   static   int  getMinute()
 84      {
 85          return  cal.get( 12 );
 86     }

 87 /**
 88  *时间函数 返回当前时间的秒数
 89  * @return  String
 90 */

 91      public   static   int  getSecond()
 92      {
 93          return  cal.get( 13 );
 94     }

 95 /**
 96  *时间函数 返回当前时间的毫秒值
 97  * @return  String
 98 */

 99      public   static   int  getMSecond()
100      {
101          return  cal.get( 14 );
102     }

103
104 // ================================================== [[[ 日期部分 ]]] ==================================================
105
106 /**
107  *日期函数 返回一个默认的日期 [默认格式:YYYYMMDD ]
108  * @return  String
109 */

110      public   static  String getDate()
111      {
112          return  getDate( "" );
113     }

114 /**
115  *日期函数 返回一个默认的格式化日期 [默认格式:YYYYMMDD ]
116  * @return  String
117 */

118      public   static  String getFormatDate()
119      {
120          return  getFormatDate( "" );
121     }

122
123 /**
124  *日期函数 返回一个带分割符的日期 [格式:YYYY_MM_DD ]
125  * @param  sign 分割符(String) ["/"或"-"]
126  * @return  String
127 */

128      public   static  String getDate(String sign)
129      {
130          if (sign.equals( "" ) || sign.equals( " / " ) || sign.equals( " - " ))
131          {
132              return  getYear() + sign + getMonth() + sign + getDay();
133         }

134          else
135              return  getDate( "" );
136     }

137 /**
138  *日期函数 返回一个带分割符的格式化日期 [格式:YYYY_MM_DD ]
139  * @param  sign 分割符(String) ["/"或"-"]
140  * @return  String
141 */

142      public   static  String getFormatDate(String sign)
143      {
144          if (sign.equals( "" ) || sign.equals( " / " ) || sign.equals( " - " ))
145              return  StringEx.getString(getYear(), 4 ) + sign + StringEx.getString(getMonth(), 2 ) + sign + StringEx.getString(getDay(), 2 );
146          else
147              return  getFormatDate( "" );
148     }

149 // ==================================================[[[ 时间部分 ]]]==================================================
150
151 /**
152  *时间函数 返回一个默认的时间 [默认格式:HHMMSS]
153  * @return  String
154 */

155      public   static  String getTime()
156      {
157          return  getTime( "" );
158     }

159 /**
160  *时间函数 返回一个默认的格式化时间 [默认格式:HHMMSS]
161  * @return  String
162 */

163      public   static  String getFormatTime()
164      {
165          return  getFormatTime( "" );
166     }

167 /**
168  *时间函数 返回一个带分割符的时间 [格式:HH_MM_SS]
169  * @param  sign 分割符(String) [":"]
170  * @return  String
171 */

172      public   static  String getTime(String sign)
173      {
174          if (sign.equals( "" ) || sign.equals( " : " ))
175          {
176              return  getHour() + sign + getMinute() + sign + getSecond();
177         }

178          else
179              return  getTime( "" );
180     }

181 /**
182  *时间函数 返回一个带分割符的格式化时间 [格式:HH_MM_SS]
183  * @param  sign 分割符(String) [":"]
184  * @return  String
185 */

186      public   static  String getFormatTime(String sign)
187      {
188          if (sign.equals( "" ) || sign.equals( " : " ))
189          {
190              return  StringEx.getString(getHour(), 2 ) + sign + StringEx.getString(getMinute(), 2 ) + sign + StringEx.getString(getSecond(), 2 );
191         }

192          else
193              return  getFormatTime( "" );
194     }

195 /**
196  *精确时间函数 返回一个默认的精确时间 [默认格式:HHMMSSMMM]
197  * @return  String
198 */

199      public   static  String getTimes()
200      {
201          return  getTimes( "" );
202     }

203 /**
204  *精确时间函数 返回一个默认的格式化精确时间 [默认格式:HHMMSSMMM]
205  * @return  String
206 */

207      public   static  String getFormatTimes()
208      {
209          return  getFormatTimes( "" );
210     }

211 /**
212  *精确时间函数 返回一个带分割符的精确时间 [格式:HH_MM_SS_MMM]
213  * @param  sign 分割符(String) [":"]
214  * @return  String
215 */

216      public   static  String getTimes(String sign)
217      {
218          if (sign.equals( "" ) || sign.equals( " : " ))
219          {
220              return  getTime(sign) + sign + getMSecond();
221         }

222          else
223              return  getTimes( "" );
224     }

225 /**
226  *精确时间函数 返回一个带分割符的格式化的精确时间 [格式:HH_MM_SS_MMM]
227  * @param  sign 分割符(String) [":"]
228  * @return  String
229 */

230      public   static  String getFormatTimes(String sign)
231      {
232          if (sign.equals( "" ) || sign.equals( " : " ))
233          {
234              return  getFormatTime(sign) + sign + StringEx.getString(getMSecond(), 3 );
235         }

236          else
237              return  getFormatTimes( "" );
238     }

239
240 // ==================================================[[[ 日期时间部分 ]]]==================================================
241
242 /**
243  *日期时间函数 返回一个默认的日期时间 [格式:YYYYMMDDHHMMSS]
244  * @return  String
245 */

246      public   static  String getDateTime()
247      {
248          return  getDateTime( "" , "" , "" );
249     }

250 /**
251  *日期时间函数 返回一个默认的格式化日期时间 [格式:YYYYMMDDHHMMSS]
252  * @return  String
253 */

254      public   static  String getFromatDateTime()
255      {
256          return  getFormatDateTime( "" , "" , "" );
257     }

258 /**
259  *日期时间函数 返回一个带分割符的日期时间 [格式:YYYYMMDD_HHMMSS]
260  * @param  sign 分割符(String) [" "]
261  * @return  String
262 */

263      public   static  String getDateTime(String sign)
264      {
265          return  getDateTime( "" ,sign, "" );
266     }

267 /**
268  *日期时间函数 返回一个带分割符的格式化日期时间 [格式:YYYYMMDD_HHMMSS]
269  * @param  sign 分割符(String) [" "]
270  * @return  String
271 */

272      public   static  String getFromatDateTime(String sign)
273      {
274          return  getFormatDateTime( "" ,sign, "" );
275     }

276 /**
277  *日期时间函数 返回一个带分割符的日期时间 [格式:YYYY_MM_DD_HH_MM_SS]
278  * @param  sign1 日期分割符(String)  ["/"或"-"]
279  * @param  sign2 间隔符(String) [" "]
280  * @param  sign3 时间分割符(String) [":"]
281  * @return  String
282 */

283      public   static  String getDateTime(String sign1,String sign2,String sign3)
284      {
285          if (sign2.equals( "" ) || sign2.equals( "   " ))
286              return  getDate(sign1) + sign2 + getTime(sign3);
287          else
288              return  getDateTime(sign1, "" ,sign3);
289     }

290 /**
291  *日期时间函数 返回一个带分割符的格式化日期时间 [格式:YYYY_MM_DD_HH_MM_SS]
292  * @param  sign1 日期分割符(String)  ["/"或"-"]
293  * @param  sign2 间隔符(String) [" "]
294  * @param  sign3 时间分割符(String) [":"]
295  * @return  String
296 */

297      public   static  String getFormatDateTime(String sign1,String sign2,String sign3)
298      {
299          if (sign2.equals( "" ) || sign2.equals( "   " ))
300              return  getFormatDate(sign1) + sign2 + getFormatTime(sign3);
301          else
302              return  getFormatDateTime(sign1, "" ,sign3);
303     }

304 /**
305  *精确日期时间函数 返回一个默认是的精确日期时间 [格式:YYYYMMDDHHMMSSMMM]
306  * @return  String
307 */

308      public   static  String getDateTimes()
309      {
310          return  getDateTimes( "" , "" , "" );
311     }

312 /**
313  *精确日期时间函数 返回一个默认是的精确格式化日期时间 [格式:YYYYMMDDHHMMSSMMM]
314  * @return  String
315 */

316      public   static  String getFormatDateTimes()
317      {
318          return  getFormatDateTimes( "" , "" , "" );
319     }

320 /**
321  *精确日期时间函数 返回一个带分割符的日期时间 [格式:YYYY_MM_DD_HH_MM_SS_MMM]
322  * @param  sign 间隔符(String) [" "]
323  * @return  String
324 */

325      public   static  String getDateTimes(String sign)
326      {
327          return  getDateTimes( "" ,sign, "" );
328     }

329 /**
330  *精确日期时间函数 返回一个带分割符的日期时间 [格式:YYYY_MM_DD_HH_MM_SS_MMM]
331  * @param  sign 间隔符(String) [" "]
332  * @return  String
333 */

334      public   static  String getFormatDateTimes(String sign)
335      {
336          return  getFormatDateTimes( "" ,sign, "" );
337     }

338 /**
339  *精确日期时间函数 返回一个带分割符的精确日期时间 [格式:YYYY_MM_DD_HH_MM_SS_MMM]
340  * @param  sign1 日期分割符(String) ["/"或"-"]
341  * @param  sign2 间隔符(String) [" "]
342  * @param  sign3 时间分割符(String) [":"]
343  * @return  String
344 */

345      public   static  String getDateTimes(String sign1,String sign2,String sign3)
346      {
347          if (sign2.equals( "" ) || sign2.equals( "   " ))
348              return  getDate(sign1) + sign2 + getTimes(sign3);
349          else
350              return  getDateTimes(sign1, "" ,sign3);
351     }

352 /**
353  *精确日期时间函数 返回一个带分割符的精确格式化日期时间 [格式:YYYY_MM_DD_HH_MM_SS_MMM]
354  * @param  sign1 日期分割符(String) ["/"或"-"]
355  * @param  sign2 间隔符(String) [" "]
356  * @param  sign3 时间分割符(String) [":"]
357  * @return  String
358 */

359      public   static  String getFormatDateTimes(String sign1,String sign2,String sign3)
360      {
361          if (sign2.equals( "" ) || sign2.equals( "   " ))
362              return  getFormatDate(sign1) + sign2 + getFormatTimes(sign3);
363          else
364              return  getFormatDateTimes(sign1, "" ,sign3);
365     }

366
367 // ==================================================[[[ 中文部分 ]]]==================================================
368
369
370 /**
371  *日期函数 返回一个中文格式的日期 [格式:YYYY年MM月DD日 ]
372  * @return  String
373 */

374      public   static  String getDateC()
375      {
376          return  getYear() + " " + getMonth() + " " + getDay() + " " ;
377     }

378 /**
379  *时间函数 返回一个中文格式的时间 [格式:HH时MM分SS秒]
380  * @return  String
381 */

382      public   static  String getTimeC()
383      {
384          return  getHour() + " " + getMinute() + " " + getSecond() + " " ;
385     }

386 /**
387  *精确时间函数 返回一个中文格式的精确时间 [格式:HH时MM分SS秒MMM毫]
388  * @return  String
389 */

390      public   static  String getTimesC()
391      {
392          return  getTimeC() + getMSecond() + " " ;
393     }

394 /**
395  *日期时间函数 返回一个中文格式的日期时间 [格式:YYYY年MM月DD日 HH时MM分SS秒]
396  * @return  String
397 */

398      public   static  String getDateTimeC()
399      {
400          return  getDateC() + "   " + getTimeC();
401     }

402 /**
403  *精确日期时间函数 返回一个中文格式的精确日期时间 [格式:YYYY年MM月DD日HH时MM分SS秒MMM毫]
404  * @return  String
405 */

406      public   static  String getDateTimesC()
407      {
408          return  getDateC() + "   " + getTimesC();
409     }

410 // ==================================================[[[ 中文大写部分 ]]]==================================================
411 /**
412  *中文年份函数 返回一个中文格式的年份
413  * @return  String
414 */

415      public   static  String getYearCN()
416      {
417          return  StringEx.getStringYearCN(getYear()) + " " ;
418     }

419 /**
420  *中文月份函数 返回一个中文格式的月份
421  * @return  String
422 */

423      public   static  String getMonthCN()
424      {
425          return  StringEx.getStringCN(getMonth()) + " " ;
426     }

427 /**
428  *中文日期函数 返回一个中文格式的日期
429  * @return  String
430 */

431      public   static  String getDayCN()
432      {
433          return  StringEx.getStringCN(getDay()) + " " ;
434     }

435 /**
436  *中文日期函数 返回一个中文格式的时间日期 [格式: XXXX年XX月XX日 ]
437  * @return  String
438 */

439      public   static  String getDateCN()
440      {
441          return  getYearCN() + getMonthCN() + getDayCN();
442     }

443 /**
444  *中文日期函数 返回一个中文格式的时间日期 [格式: XXXX年XX月XX日 ]
445  * @return  String
446 */

447      public   static  String getDateTimeCN()
448      {
449          return  getDateCN() + "   " + getTimeC();
450     }

451 /**
452  *中文日期函数 返回一个中文格式的时间日期 [格式: XXXX年XX月XX日 ]
453  * @return  String
454 */

455      public   static  String getDateTimesCN()
456      {
457          return  getDateCN() + "   " + getTimesC();
458     }

459
460
461 // ==================================================[[[ 日期计算部分 ]]]==================================================
462 /**
463  *日期比较函数 第一个日期大或者,返回真.否则返回假
464  * @param  DateStr1 第一个日期型字符串 (String)
465  * @param  DateStr2 第二个日期型字符串 (String)
466  * @return  Boolean
467 */

468      public   static   boolean  CheckDateB()
469      {
470          return   true ;
471     }

472
473
474 // ==================================================[[[ 日期格式判断 ]]]==================================================
475
476 /**
477  *日期格式判断函数 返回真假值
478  * @param  DateStr 需要判断的时间型字符串 (String)
479  * @return  Boolean
480 */

481      public   static   boolean  CheckDate(String DateStr)
482      {
483          return  CheckYMD(getYMD(DateStr));
484     }

485 /**
486  *内部日期判断函数 返回真假值
487  * @param  year 年份字符串 (String)
488  * @param  month 月份字符串 (String)
489  * @param  day 日期字符串 (String)
490  * @return  Boolean
491 */

492
493 public   static  String[] getYMD(String DateStr)
494 {
495     String str = "" ;        
496      if (DateStr.length() == 8 && CheckNumber(DateStr))
497         str = DateStr.substring( 0 , 4 ) + " - " + DateStr.substring( 4 , 6 ) + " - " + DateStr.substring( 6 );
498      if (DateStr.split( " - " ).length == 3 )
499         str = DateStr;
500      if (DateStr.split( " / " ).length == 3 )
501         str = DateStr.replace( " / " , " - " );
502      if (DateStr.split( "   " ).length == 3 )
503         str = DateStr.replace( "   " , " - " );
504      if (DateStr.indexOf( " " ) > 0 && DateStr.indexOf( " " ) > 0 && DateStr.indexOf( " " ) > 0 )
505         str = DateStr.substring( 0 ,DateStr.indexOf( " " )) + " - " + DateStr.substring(DateStr.indexOf( " " ) + 1 ,DateStr.indexOf( " " )) + " - " + DateStr.substring(DateStr.indexOf( " " ) + 1 ,DateStr.indexOf( " " ));
506      if  (str.equals( "" ))
507          return   null ;
508      else
509          return  str.split( " - " );
510 }

511 /**
512  *内部日期判断函数 返回真假值
513  * @param  date 年/月/日组成的字符串数组 (String[])
514  * @return  Boolean
515 */

516
517 public   static   boolean  CheckDateTimes(String[] str)
518 {
519      if (strYMD == null || strYMD.length() == 0 )
520          return   false ;
521      else
522      {
523          if  (strYMD.indexOf( " - " ) > 0 )
524             str = strYMD.split( " - " );
525          else
526          {
527              return  CheckYMD(strdate[ 0 ],strdate[ 1 ],strdate[ 2 ]);
528         }

529     }

530 }

531
532 // ==================================================[[[ 时间格式判断 ]]]==================================================
533
534 /**
535  *日期格式判断函数 返回真假值
536  * @param  TimeStr 需要判断的时间型字符串 (String)
537  * @return  Boolean
538 */

539      public   static   boolean  CheckTime(String TimeStr)
540      {
541          if (TimeStr.length() == 6 && CheckNumber(TimeStr))
542          {
543              return  CheckHMSS(TimeStr.substring( 0 , 2 ),TimeStr.substring( 2 , 4 ),TimeStr.substring( 4 , 6 ), "" );
544         }

545          if (TimeStr.length() == 9 && CheckNumber(TimeStr))
546          {
547              return  CheckHMSS(TimeStr.substring( 0 , 2 ),TimeStr.substring( 2 , 4 ),TimeStr.substring( 4 , 6 ),TimeStr.substring( 6 , 9 ));
548         }

549          if (TimeStr.split( " : " ).length == 3 )
550          {
551              return  CheckHMSS(TimeStr.split( " : " ));
552         }

553          if (TimeStr.indexOf( " " ) > 0 && TimeStr.indexOf( " " ) > 0 && TimeStr.indexOf( " " ) > 0 && TimeStr.indexOf( " " ) < 0 )
554          {
555              return  CheckHMSS(TimeStr.substring( 0 ,TimeStr.indexOf( " " ) + 1 ),TimeStr.substring( 3 ,TimeStr.indexOf( " " ) + 1 ),TimeStr.substring( 6 ,TimeStr.indexOf( " " ) + 1 ), "" );
556         }

557          if (TimeStr.indexOf( " " ) > 0 && TimeStr.indexOf( " " ) > 0 && TimeStr.indexOf( " " ) > 0 && TimeStr.indexOf( " " ) > 0 )
558          {
559              return  CheckHMSS(TimeStr.substring( 0 ,TimeStr.indexOf( " " ) + 1 ),TimeStr.substring( 3 ,TimeStr.indexOf( " " ) + 1 ),TimeStr.substring( 6 ,TimeStr.indexOf( " " ) + 1 ),TimeStr.substring( 9 ,TimeStr.indexOf( " " ) + 1 ));
560         }

561
562          return   false ;
563     }

564 /**
565  *内部日期判断函数 返回真假值
566  * @param  year 年份字符串 (String)
567  * @param  month 月份字符串 (String)
568  * @param  day 日期字符串 (String)
569  * @return  Boolean
570 */

571
572 public   static   boolean  CheckHMSS(String hour,String minute,String second,String msecond)
573 {
574      if (msecond.equals( "" )) msecond = " 0 " ;
575      if  (CheckNumber(hour) && CheckNumber(minute) && CheckNumber(second) && CheckNumber(msecond))
576      {
577          if  (Integer.parseInt(hour) <= 23 && Integer.parseInt(minute) <= 59 && Integer.parseInt(second) <= 59 )
578          {
579              return   true ;
580         }

581          return   false ;
582     }

583      return   false ;
584 }

585 /**
586  *内部日期判断函数 返回真假值
587  * @param  date 年/月/日组成的字符串数组 (String[])
588  * @return  Boolean
589 */

590
591 public   static   boolean  CheckHMSS(String[] strtime)
592 {
593      if  (strtime.length == 3 )
594          return  CheckHMSS(strtime[ 0 ],strtime[ 1 ],strtime[ 2 ], "" );
595      if  (strtime.length == 4 )
596          return  CheckHMSS(strtime[ 0 ],strtime[ 1 ],strtime[ 2 ],strtime[ 3 ]);
597      return   false ;
598 }

599
600 // ==================================================[[[ 时间日期格式判断 ]]]==================================================
601
602
603 /**
604  *内部数字判断函数 返回真假值
605  * @param  str 需判断的字符串 (String)
606  * @return  Boolean
607 */

608 public   static   boolean  CheckNumber(String str)
609 {
610      if  (str == null )
611          return   false ;
612      else
613      {
614         String s = "" ;
615          for  ( int  i = 0 ;i < str.length();i ++ )
616          {
617             s += " [0-9] " ;
618         }

619          return  Pattern.matches(s,str);
620     }

621 }

622 /**
623  *大写中文年份函数 返回一个字符的大写中文年份数字
624  *@para numberStr 需要转换的数字 (String)
625  * @return  String
626 */

627      public   static  String getStringYearCN(String numberStr)
628      {
629         String s = "" ;
630          for  ( int  i = 0 ;i < numberStr.length();i ++  )
631          {
632             s += getStringCN(Integer.parseInt(numberStr.substring(i,i + 1 )));
633         }

634          return  s;
635     }

636 /**
637  *大写中文年份函数 返回一个字符的大写中文年份数字
638  *@para number 需要转换的数字 (int)
639  * @return  String
640 */

641      public   static  String getStringYearCN( int  number)
642      {
643          return  getStringYearCN(String.valueOf(number));
644     }

645
646 /**
647  *大写中文月份/日期函数 返回一个字符的大写中文月份/日期数字
648  *@para number 需要转换的数字(int型0~31)
649  * @return  String
650 */

651      public   static  String getStringCN( int  number)
652      {
653         String[] numberCN = { " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " 十一 " , " 十二 " , " 十三 " , " 十四 " , " 十五 " , " 十六 " , " 十七 " , " 十八 " , " 十九 " , " 二十 " , " 二十一 " , " 二十二 " , " 二十三 " , " 二十四 " , " 二十五 " , " 二十六 " , " 二十七 " , " 二十八 " , " 二十九 " , " 三十 " , " 三十一 " ,} ;
654          if (number < 32 )
655              {     return  numberCN[number];    }
656          else
657              return   " 请输入 0~31 之间的数字 " ;
658     }

659
660 // ==================================================[[[ 结束分割符 ]]]==================================================
661 }