亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

?日期工具類

張軍 8649 0

所有工具類

日期工具類


張軍博客

源碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
package zj.date.util;
 
import java.io.File;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
import org.apache.log4j.Logger;
 
import zj.cache.util.EhCacheUtil;
import zj.common.exception.ServiceException;
import zj.date.bean.TradeDate;
import zj.io.util.FileUtil;
import zj.java.util.JavaUtil;
import zj.reflect.util.TypeUtil;
 
/**
 
 * 日期工具類
 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link <a href=http://user.qzone.qq.com/360901061/>張軍QQ空間</a>}
 
 */
public class DateUtil implements Serializable {
    private static final long serialVersionUID = 1L;
    private transient static final Logger log = Logger.getLogger(DateUtil.class);
    public static final String EHCACHE_HOLIDAY_DATE = "holidayDate";
 
    // =====================================================交易日======================================
    // DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);
    // String value = "'" + formatter.format(new Date()) + "'";
    // System.out.println(value);
    // /**
    // * 初使化節假日數據
    // *
    // * @param conn
    // * 數據庫連接
    // * @return
    // */
    // public static void cacheHoliday(Connection conn) {
    // Map<String, String> holidayMap = new HashMap<String, String>();
    // PreparedStatement psQuery = null;
    // ResultSet rs = null;
    // try {
    // String sql = "select date_format(a.c_date,'%Y%m%d') c_date,a.c_desc from dc_trade_date a where a.is_trade_date=2";
    // psQuery = conn.prepareStatement(sql);
    // rs = psQuery.executeQuery();
    // while (rs.next()) {
    // holidayMap.put(rs.getString(1), rs.getString(2));
    // }
    // EhCacheUtil.put(Constant.EHCACHE_HOLIDAY_DATE, holidayMap);
    // logger.info("緩存節假日數據成功:" + holidayMap.size());
    // } catch (Exception e) {
    // throw new ServiceException(e);
    // } finally {
    // JdbcUtil.closeDB(rs, psQuery);
    // }
    // }
    /**
     * 取交易日[不包含當前日期]
     
     * @param td
     *            參數信息
     * @return
     */
    public static final Date tradeDate(TradeDate td) {
        Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
        if (holidayMap == null || holidayMap.size() == 0) {
            throw new ServiceException("未初使化交易日文件,請執行DateUtil.initTradeDate(file)");
        }
        /** 當前日期 **/
        Date current = td.current;
        /** 遞歸次數 **/
        int recursionCount = td.recursionCount;
        /** 當前日期前后,默認前 **/
        boolean beforeCurrent = td.beforeCurrent;
        /** 交易日前后,默認前 **/
        boolean beforeTradeDate = td.beforeTradeDate;
        /** 類型[默認0:天,1:周,2:月,3:季度,4:年] **/
        int type = td.type;
        // 首先取上一個日期
        if (type == 3) {
            // 加減3個月
            current = DateUtil.addMonth(current, beforeCurrent ? -3 3);
        else {
            // 加減1天
            current = DateUtil.addDay(current, beforeCurrent ? -1 1);
        }
        int addDay = beforeTradeDate ? -1 1;
        // 加一天
        while (holidayMap.containsKey(DateUtil.dateParse(current, "yyyyMMdd"))) {
            // 是否是節假日
            current = DateUtil.addDay(current, addDay);
        }
        if (recursionCount <= 1) {
            return current;
        else {
            td.current = current;
            td.recursionCount = td.recursionCount - 1;
            return tradeDate(td);
        }
    }
 
    /**
     * 是否是交易日
     
     * @param current
     *            日期
     * @return
     */
    public static final boolean isTradeDate(Date current) {
        Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
        if (holidayMap.containsKey(DateUtil.dateParse(current, "yyyyMMdd"))) {
            return false;
        }
        return true;
    }
 
    /**
     * 初使化交易日數據
     
     * @param holidayMap
     *            交易日數據
     */
    public static final void initTradeDate(Map<String, String> holidayMap) {
        EhCacheUtil.put(EHCACHE_HOLIDAY_DATE, holidayMap);
    }
 
    /**
     * 初使化交易日數據
     
     * @param tradeDateFilePath
     *            交易日文件
     */
    public static final void initTradeDate(String tradeDateFilePath) {
        try {
            // 測試股票
            // System.out.println(DateUtil.class.getResource("/trade_dates.txt").getPath());
            // String file = "/versionManager/sources/java/zj-model/integration/tools/src/main/resources/trade_dates.txt";
            Set<String> holidays = new HashSet<String>();
            Map<String, String> holidayMap = new HashMap<String, String>();
            FileUtil.readLines(holidays, new File(tradeDateFilePath));
            for (String v : holidays) {
                String[] vs = JavaUtil.split(v, "\t");
                if (vs.length == 2) {
                    // System.out.println(vs[0] + ":" + vs[1]);
                    holidayMap.put(vs[0], vs[1]);
                }
            }
            EhCacheUtil.put(EHCACHE_HOLIDAY_DATE, holidayMap);
        catch (Exception e) {
            log.error("初使化交易日錯誤");
        }
    }
 
    /**
     * 取交易日
     
     * @param current
     *            日期
     * @return
     */
    @Deprecated
    public static final Date preTradeDate(Date current) {
        return preTradeDate(current, 1true);
    }
 
    /**
     * 取交易日
     
     * @param current
     *            日期
     * @return
     */
    @Deprecated
    public static final Date preTradeDate(Date current, int tDay) {
        return preTradeDate(current, tDay, true);
    }
 
    /**
     * 取交易日
     
     * @param current
     *            日期
     * @return
     */
    @Deprecated
    public static final Date preTradeDate(Date current, int tDay, boolean before) {
        Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
        if (holidayMap == null || holidayMap.size() == 0) {
            throw new ServiceException("未初使化交易日文件,請執行DateUtil.initTradeDate(file)");
        }
        // 首先取上一個日期
        int addDay = before ? -1 1;
        current = DateUtil.addDay(current, addDay);
        // 加一天
        while (holidayMap.containsKey(DateUtil.dateParse(current, "yyyyMMdd"))) {
            // 是否是節假日
            current = DateUtil.addDay(current, addDay);
        }
        if (tDay <= 1) {
            return current;
        else {
            return preTradeDate(current, tDay - 1, before);
        }
    }
 
    /**
     * 獲取交易日集合
     
     * @param sdate
     *            日期
     * @param preDays
     *            向前取多少天
     * @param diffDays
     *            相差多少天
     * @author zhangjun
     * @return
     */
    public static List<String> getTradeDates(String sdate, int preDays, int diffDays) {
        List<String> rdates = new ArrayList<String>();
        try {
            Date date = DateUtil.parseDate(sdate);
            Map<String, String> holidayDate = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
            // 相差天數
            diffDays = diffDays <= 0 ? -1 : -(diffDays + 1);
            // 總交易日
            int totalDays = -diffDays * preDays;
            // 相隔日期
            List<String> dates = new ArrayList<String>();
            loop: while (true) {
                while (true) {
                    // 判斷是否是節假日
                    if (!holidayDate.containsKey(DateUtil.dateParse(date, "yyyyMMdd"))) {
                        // 添加交易日
                        dates.add(DateUtil.dateParse(date, "yyyy-MM-dd"));
                        // 總天數減1
                        totalDays--;
                        if (totalDays <= 0) {
                            // 循環結束后-1
                            break loop;
                        }
                    }
                    date = DateUtil.addDay(date, -1);
                }
            }
            // 真實的交易日
            for (int i = 0; i < dates.size(); i = i - diffDays) {
                rdates.add(dates.get(i));
            }
            // logger.info("-------待計算的所有交易日------------\n" + dates.size() + ":" + dates);
            // logger.info("-------計算相隔后的所有交易日------------\n" + rdates.size() + ":" + rdates);
        catch (Exception e) {
            throw new ServiceException(e);
        }
        return rdates;
    }
 
    // =====================================================交易日======================================
    /**
     * 日期類型
     
     * @author zhangjun
     
     */
    public static class DateType implements Serializable {
        private static final long serialVersionUID = 1L;
        public static int DATE_TYPE_ALL = 0;
        public static int DATE_TYPE_y4 = 1;
        public static int DATE_TYPE_y4_MM = 2;
        public static int DATE_TYPE_y4_MM_dd = 3;
        public static int DATE_TYPE_y4_MM_dd_HH = 4;
        public static int DATE_TYPE_y4_MM_dd_HH_mm = 5;
        public static int DATE_TYPE_y4_MM_dd_HH_mm_ss = 6;
 
        public static int RANGE_TYPE_y = 0;
        public static int RANGE_TYPE_M = 1;
        public static int RANGE_TYPE_d = 2;
        public static int RANGE_TYPE_H = 3;
        public static int RANGE_TYPE_m = 4;
        public static int RANGE_TYPE_s = 5;
    }
 
    /**
     * 獲取星期幾
     
     * @param w
     *            星期標識0-6=>周日-日六
     * @return
     */
    public static final String getDescWeekday(int w) {
        switch (w) {
        case 1:
            return "星期一";
        case 2:
            return "星期二";
        case 3:
            return "星期三";
        case 4:
            return "星期四";
        case 5:
            return "星期五";
        case 6:
            return "星期六";
        case 7:
            return "星期日";
        default:
            return "";
        }
    }
    /**
     * 獲取星期幾
     
     * @param w
     *            星期標識0-6=>周日-周六
     * @return
     */
    public static final String getDescWeekday(String w) {
        return getDescWeekday(TypeUtil.Primitive.intValue(w));
    }
    /**
     * 字符串轉日期
     
     * @param dt
     *            日期字符串
     * @return 日期對象
     */
    public static Date parseDate(String dt) {
        return parseDate(dt, DateType.DATE_TYPE_ALL);
    }
 
    /**
     * 字符串轉日期
     
     * @param dt
     *            日期字符串
     * @param dateType
     *            日期類型
     * @see DateType
     * @return 日期對象
     */
    public static Date parseDate(String dt, int dateType) {
        Date rd = null;
        try {
            if (dt == null || dt == "") {
                log.warn("日期不能為:" + dt);
            else {
                boolean isFail = false;
                String _val_format = "【" + dt + "】不是一個有效的日期格式\n支持日期格式如下:\n";
                if (dateType == DateType.DATE_TYPE_y4) {
                    _val_format += "【yyyy】";
                else if (dateType == DateType.DATE_TYPE_y4_MM) {
                    _val_format += "【yyyyMM或yyyy-MM或yyyy/MM或yyyy MM】";
                else if (dateType == DateType.DATE_TYPE_y4_MM_dd) {
                    _val_format += "【yyyyMMdd或yyyy-MM-dd或yyyy/MM/dd或yyyy MM dd】";
                else if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH) {
                    _val_format += "【yyyyMMddhh或yyyy-MM-dd hh或yyyy/MM/dd hh或yyyy MM dd hh】";
                else if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm) {
                    _val_format += "【yyyyMMddhhmm或yyyy-MM-dd hh:mm或yyyy/MM/dd hh:mm或yyyy MM dd hh:mm】";
                else if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm_ss) {
                    _val_format += "【yyyyMMddhhmmss或yyyy-MM-dd hh:mm:ss或yyyy/MM/dd hh:mm:ss或yyyy MM dd hh:mm:ss】";
                else {
                    dateType = DateType.DATE_TYPE_ALL;
                    _val_format += "【yyyy】";
                    _val_format += "【yyyyMM或yyyy-MM或yyyy/MM或yyyy MM】";
                    _val_format += "【yyyyMMdd或yyyy-MM-dd或yyyy/MM/dd或yyyy MM dd】";
                    _val_format += "【yyyyMMddhh或yyyy-MM-dd hh或yyyy/MM/dd hh或yyyy MM dd hh】";
                    _val_format += "【yyyyMMddhhmm或yyyy-MM-dd hh:mm或yyyy/MM/dd hh:mm或yyyy MM dd hh:mm】";
                    _val_format += "【yyyyMMddhhmmss或yyyy-MM-dd hh:mm:ss或yyyy/MM/dd hh:mm:ss或yyyy MM dd hh:mm:ss】";
                }
                String datePat = "";
                datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)([0-9]{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$";
                Matcher mt = Pattern.compile(datePat).matcher(dt);
                String year = "";
                String month = "";
                String day = "";
                String hour = "";
                String minute = "";
                String second = "";
                if (mt.find()) {
                    if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm_ss || dateType == DateType.DATE_TYPE_ALL) {
                        year = mt.group(1);
                        month = mt.group(3);
                        day = mt.group(5);
                        hour = mt.group(6);
                        minute = mt.group(7);
                        second = mt.group(8);
                    else {
                        isFail = true;
                    }
                else {
                    datePat = "^(\\d{14})$";
                    mt = Pattern.compile(datePat).matcher(dt);
                    if (mt.find()) {
                        if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm_ss || dateType == DateType.DATE_TYPE_ALL) {
                            year = dt.substring(04);
                            month = dt.substring(46);
                            day = dt.substring(68);
                            hour = dt.substring(810);
                            minute = dt.substring(1012);
                            second = dt.substring(1214);
                        else {
                            isFail = true;
                        }
 
                    else {
                        datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)(\\d{1,2}) (\\d{1,2}):(\\d{1,2})$";
                        mt = Pattern.compile(datePat).matcher(dt);
                        if (mt.find()) {
                            if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm || dateType == DateType.DATE_TYPE_ALL) {
                                year = mt.group(1);
                                month = mt.group(3);
                                day = mt.group(5);
                                hour = mt.group(6);
                                minute = mt.group(7);
                                second = "0";
                            else {
                                isFail = true;
                            }
                        else {
                            datePat = "^(\\d{12})$";
                            mt = Pattern.compile(datePat).matcher(dt);
                            if (mt.find()) {
                                if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm || dateType == DateType.DATE_TYPE_ALL) {
                                    year = dt.substring(04);
                                    month = dt.substring(46);
                                    day = dt.substring(68);
                                    hour = dt.substring(810);
                                    minute = dt.substring(1012);
                                    second = "0";
                                else {
                                    isFail = true;
                                }
                            else {
                                datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)(\\d{1,2}) (\\d{1,2})$";
                                mt = Pattern.compile(datePat).matcher(dt);
                                if (mt.find()) {
                                    if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH || dateType == DateType.DATE_TYPE_ALL) {
                                        year = mt.group(1);
                                        month = mt.group(3);
                                        day = mt.group(5);
                                        hour = mt.group(6);
                                        minute = "0";
                                        second = "0";
                                    else {
                                        isFail = true;
                                    }
                                else {
                                    datePat = "^(\\d{10})$";
                                    mt = Pattern.compile(datePat).matcher(dt);
                                    if (mt.find()) {
                                        if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH || dateType == DateType.DATE_TYPE_ALL) {
                                            year = dt.substring(04);
                                            month = dt.substring(46);
                                            day = dt.substring(68);
                                            hour = dt.substring(810);
                                            minute = "0";
                                            second = "0";
                                        else {
                                            isFail = true;
                                        }
                                    else {
                                        datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)(\\d{1,2})$";
                                        mt = Pattern.compile(datePat).matcher(dt);
                                        if (mt.find()) {
                                            if (dateType == DateType.DATE_TYPE_y4_MM_dd || dateType == DateType.DATE_TYPE_ALL) {
                                                year = mt.group(1);
                                                month = mt.group(3);
                                                day = mt.group(5);
                                                hour = "0";
                                                minute = "0";
                                                second = "0";
                                            else {
                                                isFail = true;
                                            }
                                        else {
                                            datePat = "^(\\d{8})$";
                                            mt = Pattern.compile(datePat).matcher(dt);
                                            if (mt.find()) {
                                                if (dateType == DateType.DATE_TYPE_y4_MM_dd || dateType == DateType.DATE_TYPE_ALL) {
                                                    year = dt.substring(04);
                                                    month = dt.substring(46);
                                                    day = dt.substring(68);
                                                    hour = "0";
                                                    minute = "0";
                                                    second = "0";
                                                else {
                                                    isFail = true;
                                                }
                                            else {
                                                datePat = "^(\\d{4})(/|-| )(\\d{1,2})$";
                                                mt = Pattern.compile(datePat).matcher(dt);
                                                if (mt.find()) {
                                                    if (dateType == DateType.DATE_TYPE_y4_MM || dateType == DateType.DATE_TYPE_ALL) {
                                                        year = mt.group(1);
                                                        month = mt.group(3);
                                                        day = "1";
                                                        hour = "0";
                                                        minute = "0";
                                                        second = "0";
                                                    else {
                                                        isFail = true;
                                                    }
                                                else {
                                                    datePat = "^(\\d{6})$";
                                                    mt = Pattern.compile(datePat).matcher(dt);
                                                    if (mt.find()) {
                                                        if (dateType == DateType.DATE_TYPE_y4_MM || dateType == DateType.DATE_TYPE_ALL) {
                                                            year = dt.substring(04);
                                                            month = dt.substring(46);
                                                            day = "1";
                                                            hour = "0";
                                                            minute = "0";
                                                            second = "0";
                                                        else {
                                                            isFail = true;
                                                        }
                                                    else {
                                                        datePat = "^(\\d{4})$";
                                                        mt = Pattern.compile(datePat).matcher(dt);
                                                        if (mt.find()) {
                                                            if (dateType == DateType.DATE_TYPE_y4 || dateType == DateType.DATE_TYPE_ALL) {
                                                                year = mt.group(1);
                                                                month = "1";
                                                                day = "1";
                                                                hour = "0";
                                                                minute = "0";
                                                                second = "0";
                                                            else {
                                                                isFail = true;
                                                            }
                                                        else {
                                                            _val_format = "【" + dt + "】不是一個有效的日期格式";
                                                            isFail = true;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (isFail) {
                    log.warn(_val_format);
                else {
                    int iyear = Integer.parseInt(year);
                    int imonth = Integer.parseInt(month);
                    int iday = Integer.parseInt(day);
                    int ihour = Integer.parseInt(hour);
                    int iminute = Integer.parseInt(minute);
                    int isecond = Integer.parseInt(second);
                    if (iyear < 1 || iyear > 9999) {
                        _val_format = "年份必須在0001-9999之間";
                        isFail = true;
                    }
                    if (imonth < 1 || imonth > 12) {
                        _val_format = "月份必須在01-12之間";
                        isFail = true;
                    }
                    if (iday < 1 || iday > 31) {
                        _val_format = "天數必須在01-31之間";
                        isFail = true;
                    }
                    if ((imonth == 4 || imonth == 6 || imonth == 9 || imonth == 11) && iday == 31) {
                        _val_format = month + "月不能有31天!";
                        isFail = true;
                    }
                    if (imonth == 2) {
                        boolean isleap = (iyear % 4 == 0 && iyear % 100 != 0) || iyear % 400 == 0;
                        if (isleap) {
                            if (iday > 29) {
                                _val_format = "閏年[" + year + "]年的2月不能有[" + day + "]天!";
                                isFail = true;
                            }
                        else {
                            if (iday > 28) {
                                _val_format = "平年[" + year + "]年的2月不能有[" + day + "]天!";
                                isFail = true;
                            }
                        }
                    }
                    if (ihour < 0 || ihour > 23) {
                        _val_format = "小時必須在00-23之間";
                        isFail = true;
                    }
                    if (iminute < 0 || iminute > 59) {
                        _val_format = "分鐘必須在00-59之間";
                        isFail = true;
                    }
                    if (isecond < 0 || isecond > 59) {
                        _val_format = "秒鐘必須在00-59之間";
                        isFail = true;
                    }
                    if (isFail) {
                        log.warn(_val_format);
                    else {
                        // //("調試字符串如下【開始】\n" + sb.toString() + "\n調試字符串如下【結束】");
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTimeInMillis(0);
                        calendar.set(iyear, imonth - 1, iday, ihour, iminute, isecond);
                        rd = calendar.getTime();
                    }
                }
            }
        catch (Exception e) {
            rd = null;
            log.error(e.getMessage());
        }
        return rd;
    }
 
    /**
     * 日期解析字符串
     
     * @param odt
     *            日期對象
     * @return 返回格式化后的日期字符串,如果出錯返回當前日期對象
     */
    public static String dateParse(Object odt) {
        return dateParse(odt, null);
    }
 
    /**
     * 日期解析字符串
     
     * @param odt
     *            日期對象
     * @param partten
     *            日期格式
     *            <p>
     *            yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(0-6=>周日-周六)w x q季度
     *            </p>
     * @return 返回格式化后的日期字符串,如果出錯返回當前日期對象
     */
    public static String dateParse(Object odt, String partten) {
        try {
            if (odt == null)
                return "";
            Date dt = null;
            if (odt instanceof Date) {
                dt = (Date) odt;
            else if (odt instanceof Timestamp) {
                Timestamp ts = (Timestamp) odt;
                dt = new Date(ts.getTime());
            else if (odt instanceof Calendar) {
                Calendar cal = (Calendar) odt;
                dt = cal.getTime();
            else if (odt instanceof String) {
                dt = parseDate(String.valueOf(odt));
                if (dt == null) {
                    log.error("無效的日期:" + odt);
                    return "";
                }
            else {
                log.error("無效的日期:" + odt);
                return String.valueOf(odt);
            }
            return getParseDt(dt, partten);
        catch (Exception e) {
            log.error(e.getMessage());
            return String.valueOf(odt);
        }
    }
 
    /**
     * 日期解析字符串
     
     * @param dt
     *            日期對象
     * @param partten
     *            日期格式
     *            <p>
     *            yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(0-6=>周日-周六)w x q季度
     *            </p>
     * @return 返回格式化后的日期字符串,如果出錯返回當前日期對象
     */
    public static String getParseDt(Date dt, String partten) {
        if (dt == null)
            return "";
        if (partten == null || "".equals(partten)) {
            partten="yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(0-6=>周日-周六)w x q季度";
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        String year = "" + cal.get(Calendar.YEAR);
        String month = "" + (cal.get(Calendar.MONTH) + 1);
        String day = "" + cal.get(Calendar.DATE);
        String hour = "" + cal.get(Calendar.HOUR_OF_DAY);
        String minute = "" + cal.get(Calendar.MINUTE);
        String second = "" + cal.get(Calendar.SECOND);
        String millisecond = "" + cal.get(Calendar.MILLISECOND);
        // 星期標識【0-6=>周日-周六】=>返回【1-7=>周一-周日】
        int week_of_month = cal.get(Calendar.DAY_OF_WEEK) - 1;
        // 星期值
        String ws = "";
        switch (week_of_month) {
        case 1:
            ws += "1";
            break;
        case 2:
            ws += "2";
            break;
        case 3:
            ws += "3";
            break;
        case 4:
            ws += "4";
            break;
        case 5:
            ws += "5";
            break;
        case 6:
            ws += "6";
            break;
        case 0:
            ws += "7";
            break;
        default:
            ws = "";
            break;
        }
        // 上下午
        int r = cal.get(Calendar.AM_PM);
        String ap = "";
        if (r == Calendar.AM) {
            ap = "上午";
        }
        if (r == Calendar.PM) {
            ap = "下午";
        }
        // 季度值
        int tempMonth = TypeUtil.Primitive.intValue(month);
        // quarter季度
        String q = "";
        if (tempMonth >= 1 && tempMonth <= 3) {
            q = "1";
        else if (tempMonth >= 4 && tempMonth <= 6) {
            q = "2";
        else if (tempMonth >= 7 && tempMonth <= 9) {
            q = "3";
        else if (tempMonth >= 10 && tempMonth <= 12) {
            q = "4";
        }
        String matStr = "";
        // 替換4位年
        matStr = "(y|Y){4}";
        Matcher mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(year, "0"4));
        // 替換2位月
        matStr = "M{2}";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(month, "0"2));
        // 替換季度
        matStr = "(q|Q)";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(q);
        // 替換2位天
        matStr = "d{2}";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(day, "0"2));
        // 替換2位小時
        matStr = "(h|H){2}(24)?";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(hour, "0"2));
        // 替換2位分
        matStr = "m{2}";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(minute, "0"2));
        // 替換2位秒
        matStr = "s{2}";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(second, "0"2));
        // 替換3位毫秒
        matStr = "S{3}";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR(millisecond, "0"3));
        // 替換星期
        matStr = "w|W";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(ws);
        // 替換星期
        matStr = "x|X";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(getDescWeekday(ws));
        // 替換上下午
        matStr = "p|P";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(ap);
        // 替換2位年
        matStr = "(y|Y){2}";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(year.length() > 2 ? year.substring(year.length() - 2, year.length()) : year);
        // 替換1位月
        matStr = "M";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(month);
        // 替換1位天
        matStr = "d";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(day);
        // 替換1位小時
        matStr = "(h|H){1}(12)?";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(addForLR((Integer.parseInt(hour) > 12 "" + Math.abs(Integer.parseInt(hour) - 12) : hour), "0"2));
        // matStr = "(h|H)12";
        // mt = Pattern.compile(matStr).matcher(partten);
        // partten = mt.replaceAll(Integer.parseInt(hour) > 12 ? "" + Math.abs(Integer.parseInt(hour) - 12) : hour);
        // matStr = "(h|H)24";
        // mt = Pattern.compile(matStr).matcher(partten);
        // partten = mt.replaceAll(hour);
        // 替換1位分
        matStr = "m";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(minute);
        // 替換1位秒
        matStr = "s";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(second);
        // 替換1位毫秒
        matStr = "S";
        mt = Pattern.compile(matStr).matcher(partten);
        partten = mt.replaceAll(millisecond);
        // 最終結果
        return partten;
    }
 
    /**
     * 數字前補0可以補"0"也可以補""
     
     * @param oldStr
     *            舊字符串
     * @param addStr
     *            添加字符串
     * @param strLength
     *            字符長度
     * @param isLeft
     *            <p>
     *            true:左補字符
     *            </p>
     *            <p>
     *            false:右補字符
     *            </p>
     * @return 重組后的數據
     */
    public static String addForLR(String oldStr, String addStr, int strLength, boolean isLeft) {
        if (oldStr == null || addStr == null)
            return oldStr;
        int strLen = oldStr.length();
        if (strLen < strLength) {
            while (strLen < strLength) {
                StringBuffer sb = new StringBuffer();
                if (isLeft) {
                    sb.append(addStr).append(oldStr);
                else {
                    sb.append(oldStr).append(addStr);
                }
                oldStr = sb.toString();
                strLen = oldStr.length();
            }
        }
 
        return oldStr;
    }
 
    /**
     * 數字前補0可以補"0"也可以補""
     
     * @param oldStr
     *            舊字符串
     * @param addStr
     *            添加字符串
     * @param strLength
     *            字符長度
     * @return 重組后的數據
     */
    public static String addForLR(String oldStr, String addStr, int strLength) {
        return addForLR(oldStr, addStr, strLength, true);
    }
 
    /**
     * 計算日期范圍
     
     * @param startTime
     *            開始日期對象
     * @param endTime
     *            結束日期對象
     * @param rangeType
     *            范圍類型
     * @param ymdhms
     *            年月日時分秒
     * @param dateType
     *            日期類型
     */
    public static String dateRangeFlg(Object startTime, Object endTime, int rangeType, int ymdhms, int dateType) {
        String sstartTime = startTime == null "" : String.valueOf(startTime);
        String sendTime = endTime == null "" : String.valueOf(endTime);
        String rtn_1 = "1";
        String rtn_2 = "2";
        String rtn_3 = "3";
        String rtn_4 = "4";
        String rtn_5 = "5";
        String rtn_6 = "6";
        try {
            if ("".equals(sstartTime)) {
                return rtn_4;
            }
            if ("".equals(sendTime)) {
                return rtn_5;
            }
            Date checktime1 = null;
            Date checktime2 = null;
            if (startTime instanceof Date) {
                checktime1 = (Date) startTime;
            else {
                checktime1 = parseDate(sstartTime, dateType);
            }
            if (checktime1 == null) {
                return rtn_4;
            }
            if (endTime instanceof Date) {
                checktime2 = (Date) endTime;
            else {
                checktime2 = parseDate(sendTime, dateType);
            }
            if (checktime2 == null) {
                return rtn_5;
            }
            if (startTime == "" || endTime == "")
                return "";
            Calendar cal1 = Calendar.getInstance();
            cal1.setTimeInMillis(0);
            cal1.setTime(checktime1);
            Calendar cal2 = Calendar.getInstance();
            cal2.setTimeInMillis(0);
            cal2.setTime(checktime2);
            long flg = cal2.getTimeInMillis() - cal1.getTimeInMillis();
            if (flg < 0) {
                // //("開始時間不能大于結束時間!");
                return rtn_6;
            }
            if (rangeType == DateType.RANGE_TYPE_y) {
                cal1.set(Calendar.YEAR, cal1.get(Calendar.YEAR) + ymdhms);
                // v_typeMsg = "年";
            else if (rangeType == DateType.RANGE_TYPE_M) {
                cal1.set(Calendar.MONTH, cal1.get(Calendar.MONTH) + ymdhms);
                // v_typeMsg = "個月";
            else if (rangeType == DateType.RANGE_TYPE_d) {
                cal1.set(Calendar.DATE, cal1.get(Calendar.DATE) + ymdhms);
                // v_typeMsg = "天";
            else if (rangeType == DateType.RANGE_TYPE_H) {
                cal1.set(Calendar.HOUR_OF_DAY, cal1.get(Calendar.HOUR_OF_DAY) + ymdhms);
                // v_typeMsg = "小時";
            else if (rangeType == DateType.RANGE_TYPE_m) {
                cal1.set(Calendar.MINUTE, cal1.get(Calendar.MINUTE) + ymdhms);
                // v_typeMsg = "分鐘";
            else if (rangeType == DateType.RANGE_TYPE_s) {
                cal1.set(Calendar.SECOND, cal1.get(Calendar.SECOND) + ymdhms);
                // v_typeMsg = "秒鐘";
            else {
                // //("類型值不正確,請看下面提示\ny:年,m1:月,d:日,h:時,m2:分,s:秒");
                return rtn_3;
            }
            flg = cal2.getTimeInMillis() - cal1.getTimeInMillis();
            if (flg > 0) {
                // //("開始時間和結束時間相差不能超過" + ymdhms + v_typeMsg + "!");
                return rtn_1;
            else {
                return rtn_2;
            }
        catch (Exception e) {
            return rtn_3;
        }
 
    }
 
    /**
     * Calendar 轉換為 Date
     
     * @return date日期
     */
    public static Date calToDate() {
        // (1) Calendar轉化為Date
        Calendar cal = Calendar.getInstance();
        return calToDate(cal);
    }
 
    /**
     * Calendar 轉換為 Date
     
     * @param cal
     *            Calendar日期
     * @return date日期
     */
    public static Date calToDate(Calendar cal) {
        // (1) Calendar轉化為Date
        Date date = cal.getTime();
        return date;
    }
 
    /**
     * Date 轉換為 Calendar
     
     * @return Calendar日期
     */
    public static Calendar dateToCal() {
        // (2) Date轉化為Calendar
        Date date = new Date();
        return dateToCal(date);
    }
 
    /**
     * Date 轉換為 Calendar
     
     * @param date
     *            date日期
     * @return Calendar日期
     */
    public static Calendar dateToCal(Date date) {
        // (2) Date轉化為Calendar
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal;
    }
 
    /**
     * 相差x年又y天
     
     * @param sd
     *            開始日期
     * @param ed
     *            結束日期
     * @author 張軍
     * @date 2015-11-03 21:59:00
     * @modifiyNote
     * @version 1.0
     * @return
     
     */
    public static String diffYearAndDay(Date startDate, Date endDate) {
        if (startDate == null || endDate == null) {
            return "?天";
        }
        long diffDate = DateUtil.diffDay(startDate, endDate);
        int year = 0;
        while (diffDate > 365) {
            diffDate -= 365;
            year++;
        }
        if (year > 0) {
            return year + "年又" + diffDate + "天";
        else {
            return diffDate + "天";
        }
    }
 
    /**
     * 相差日-秒
     
     * @param sd
     *            開始日期
     * @param ed
     *            結束日期
     * @return 返回值為:{天, 時, 分, 秒}
     */
    public static long[] diffDayToSecond(Date sd, Date ed) {
        Date newSd = new Date(sd.getTime());
        Date newEd = new Date(ed.getTime());
        long diff = newEd.getTime() - newSd.getTime();
        long day = 0;
        long hour = 0;
        long min = 0;
        long sec = 0;
        day = diff / (24 60 60 1000);
        hour = (diff / (60 60 1000) - day * 24);
        min = ((diff / (60 1000)) - day * 24 60 - hour * 60);
        sec = (diff / 1000 - day * 24 60 60 - hour * 60 60 - min * 60);
        long[] times = { day, hour, min, sec };
        return times;
    }
 
    /**
     * 相差日
     
     * @param sd
     *            開始日期
     * @param ed
     *            結束日期
     * @return 相差值
     */
    public static long diffDay(Date sd, Date ed) {
        Date newSd = new Date(sd.getTime());
        Date newEd = new Date(ed.getTime());
        long diff = newEd.getTime() - newSd.getTime();
        return diff / (24 60 60 1000);
    }
 
    /**
     * 加日
     
     * @param d
     *            日期
     * @param day
     *            天數
     * @return 計算后的日期
     */
    public static Date addDay(Date d, int day) {
        Date newD = new Date(d.getTime());
        newD.setTime(newD.getTime() + (long) day * 86400000L);
        return newD;
    }
 
    /**
     * 加月
     
     * @param d
     *            日期
     * @param month
     *            月數
     * @return 計算后的日期
     */
    public static Date addMonth(Date d, int month) {
        Date newD = new Date(d.getTime());
        GregorianCalendar gval = new GregorianCalendar();
        gval.setTime(newD);
        gval.add(2, month);
        newD.setTime(gval.getTime().getTime());
        return newD;
    }
 
    /**
     * 加年
     
     * @param d
     *            日期
     * @param year
     *            年數
     * @return 計算后的日期
     */
    public static Date addYear(Date d, int year) {
        Date newD = new Date(d.getTime());
        GregorianCalendar gval = new GregorianCalendar();
        gval.setTime(newD);
        gval.add(1, year);
        newD.setTime(gval.getTime().getTime());
        return newD;
    }
 
    /**
     * 相差時
     
     * @param sd
     *            開始日期
     * @param ed
     *            結束日期
     * @return 相差值
     */
    public static long diffHour(Date sd, Date ed) {
        Date newSd = new Date(sd.getTime());
        Date newEd = new Date(ed.getTime());
        long diff = newEd.getTime() - newSd.getTime();
        return diff / (60 60 1000);
    }
 
    /**
     * 加小時
     
     * @param d
     *            日期
     * @param hour
     *            小時數
     * @return 計算后的日期
     */
    public static Date addHour(Date d, int hour) {
        Date newD = new Date(d.getTime());
        newD.setTime(newD.getTime() + (long) hour * 3600000L);
        return newD;
    }
 
    /**
     * 相差分
     
     * @param sd
     *            開始日期
     * @param ed
     *            結束日期
     * @return 相差值
     */
    public static long diffMinute(Date sd, Date ed) {
        Date newSd = new Date(sd.getTime());
        Date newEd = new Date(ed.getTime());
        long diff = newEd.getTime() - newSd.getTime();
        return diff / (60 1000);
    }
 
    /**
     * 加分
     
     * @param d
     *            日期
     * @param minute
     *            分數
     * @return 計算后的日期
     */
    public static Date addMinute(Date d, int minute) {
        Date newD = new Date(d.getTime());
        newD.setTime(newD.getTime() + (long) minute * 60000L);
        return newD;
    }
 
    /**
     * 相差秒
     
     * @param sd
     *            開始日期
     * @param ed
     *            結束日期
     * @return 相差值
     */
    public static long diffSecond(Date sd, Date ed) {
        Date newSd = new Date(sd.getTime());
        Date newEd = new Date(ed.getTime());
        long diff = newEd.getTime() - newSd.getTime();
        return diff / (1000);
    }
 
    /**
     * 加秒
     
     * @param d
     *            日期
     * @param second
     *            秒數
     * @return 計算后的日期
     */
    public static Date addSecond(Date d, int second) {
        Date newD = new Date(d.getTime());
        newD.setTime(newD.getTime() + (long) second * 1000L);
        return newD;
    }
 
    /**
     * 加毫秒
     
     * @param d
     *            日期
     * @param minSecond
     *            毫秒數
     * @return 計算后的日期
     */
    public static Date addMinSecond(Date d, long minSecond) {
        Date newD = new Date(d.getTime());
        newD.setTime(newD.getTime() + minSecond * 1L);
        return newD;
    }
 
    /**
     * 將元數據前補零,補后的總長度為指定的長度,以字符串的形式返回
     
     * @param sourceData
     *            源數據
     * @param formatLength
     *            長度
     * @return 重組后的數據
     */
    public static String frontCompWithZore(int sourceData, int formatLength) {
        /*
         * 0 指前面補充零 formatLength 字符總長度為 formatLength d 代表為正數。
         */
        String newString = String.format("%0" + formatLength + "d", sourceData);
        return newString;
    }
 
    /**
     * 毫秒轉時分秒毫秒
     
     * @param millis
     * @author 張軍
     * @date 2015-11-03 21:59:00
     * @modifiyNote
     * @version 1.0
     * @return
     */
    public static Map<String, Integer> millisToHmsS(int millis) {
        Map<String, Integer> values = new HashMap<String, Integer>();
        // 時
        int h = 0;
        // 分
        int m = 0;
        // 秒
        int s = 0;
        // 毫秒
        int S = 0;
        if (millis <= 1000) {
            S = millis;
        else {
            int second = millis / 1000;
            if (millis % 1000 != 0) {
                // 毫秒數
                S = millis % 1000;
            }
            if (second > 3600) {
                // 如果大于3600秒
                int temp = second % 3600;
                h = second / 3600;
                if (temp != 0) {
                    if (temp > 60) {
                        m = temp / 60;
                        if (temp % 60 != 0) {
                            s = temp % 60;
                        }
                    else {
                        s = temp;
                    }
                }
            else {
                // 如果小于等于3600秒
                m = second / 60;
                if (second % 60 != 0) {
                    s = second % 60;
                }
            }
        }
        // System.out.println(h + "時" + m + "分" + s + "秒" + S + "毫秒");
        values.put("h", h);
        values.put("m", m);
        values.put("s", s);
        values.put("S", S);
        return values;
    }
}


日期測試類源碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package test.all;
 
import java.util.Date;
 
import org.junit.Test;
 
import zj.date.util.DateUtil;
 
public class TestDateUtil {
    @Test
    public void 基本工具類() {
        TestUtil.printStart("測試日期工具類");
        System.out.println("日期轉字符串");
        System.out.println(DateUtil.dateParse(new Date(), "yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(0-6=>周日-周六)w x q季度"));
        System.out.println("字符串轉日期");
        System.out.println(DateUtil.parseDate("2019-07-30"));
        System.out.println(DateUtil.parseDate("2019-07-30 10:11:12"));
        System.out.println(DateUtil.parseDate("20190730"));
        System.out.println(DateUtil.parseDate("20190730101112"));
        System.out.println(DateUtil.parseDate("2019/07/30 10:11:12"));
        System.out.println(DateUtil.parseDate("2019-07-30 10:11"));
        System.out.println(DateUtil.parseDate("2019/07/30 10:11"));
        System.out.println(DateUtil.parseDate("2019/07/30 10"));
        System.out.println(DateUtil.parseDate("2019-07-30 10"));
        System.out.println("日期相差天數");
        System.out.println("2019-02-25到2019-03-10共" + DateUtil.diffDay(DateUtil.parseDate("2019-02-25"), DateUtil.parseDate("2019-03-10")) + "天");
        System.out.println("2019-02-25加10天是" + DateUtil.dateParse(DateUtil.addDay(DateUtil.parseDate("2019-02-25"), 10), "yyyy-MM-dd"));
        System.out.println("對日期或時間相加減就不多做測試了");
        TestUtil.printEnd("測試日期工具類");
    }
 
    @Test
    public void 日期范圍() {
        TestUtil.printStart("查詢日期范圍");
        String sstartDate = "2019-02-26";
        String sendDate = "2019-03-06";
        long diffDays = DateUtil.diffDay(DateUtil.parseDate(sstartDate), DateUtil.parseDate(sendDate));
        System.out.println(sstartDate + "到" + sendDate + "共" + diffDays + "天,以下是循環每一天");
        for (int a = 0; a <= diffDays; a++) {
            String tdate = DateUtil.dateParse(DateUtil.addDay(DateUtil.parseDate(sstartDate), a));
            System.out.println(tdate);
        }
        TestUtil.printEnd("查詢日期范圍");
    }
}


測試結果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
測試日期工具類------>測試開始
日期轉字符串
20190802224457216毫秒下午(0-6=>周日-周六)5 星期五 3季度
字符串轉日期
Tue Jul 30 00:00:00 CST 2019
Tue Jul 30 10:11:12 CST 2019
Tue Jul 30 00:00:00 CST 2019
Tue Jul 30 10:11:12 CST 2019
Tue Jul 30 10:11:12 CST 2019
Tue Jul 30 10:11:00 CST 2019
Tue Jul 30 10:11:00 CST 2019
Tue Jul 30 10:00:00 CST 2019
Tue Jul 30 10:00:00 CST 2019
日期相差天數
2019-02-252019-03-1013
2019-02-2510天是2019-03-07
對日期或時間相加減就不多做測試了
測試日期工具類------>測試結束
查詢日期范圍------>測試開始
2019-02-262019-03-068天,以下是循環每一天
20190226000000000毫秒上午(0-6=>周日-周六)2 星期二 1季度
20190227000000000毫秒上午(0-6=>周日-周六)3 星期三 1季度
20190228000000000毫秒上午(0-6=>周日-周六)4 星期四 1季度
20190301000000000毫秒上午(0-6=>周日-周六)5 星期五 1季度
20190302000000000毫秒上午(0-6=>周日-周六)6 星期六 1季度
20190303000000000毫秒上午(0-6=>周日-周六)7 星期日 1季度
20190304000000000毫秒上午(0-6=>周日-周六)1 星期一 1季度
20190305000000000毫秒上午(0-6=>周日-周六)2 星期二 1季度
20190306000000000毫秒上午(0-6=>周日-周六)3 星期三 1季度
查詢日期范圍------>測試結束



更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 逆天至尊免费看229集 | 久久精品国产99国产精品 | 国产51自产区在线 | 亚洲精品9999久久久久 | 女生毛片 | 亚洲精品香蕉一区二区 | 国产成人综合一区精品 | 亚洲一区二区高清 | 国产成人综合亚洲欧美在 | 精品无人区乱码1区2区3区在线 | 欧美亚洲桃花综合 | 欧美色老头oldvideos | 亚洲精品成人7777在线观看 | 激情综合婷婷 | 亚洲天堂国产 | 亚洲性一级理论片在线观看 | 日本一级~片免费永久 | 国产九九视频在线观看 | 久久的精品99精品66 | 日韩欧美视频免费观看 | 在线观看视频91 | 一级毛片一级毛片 | 爽爽影院免费观看视频 | 91在线免费看 | 成人免费aa在线观看 | 成年女人在线观看 | 福利视频一区 | 色插视频| 99热婷婷| 久久青草18免费观看网站 | 91久久精一区二区三区大全 | 久久99这里精品8国产 | 波多野结衣一区二区在线 | 久久久久久久久国产 | 伊人精品在线观看 | 日韩欧美国产亚洲 | 亚洲va欧美va国产va天堂 | aaa级片| 久久综合九色综合狠狠97 | 欧美乱妇在线观看 | 久久精品国产久精国产80cm |