@@ -56,7 +56,13 @@ bool CCalenderV1::set_datetime(const CDateTime& datetime)
56
56
return false ;
57
57
}
58
58
59
- mcopy (datetime, dt_);
59
+ // 这里要特殊处理一下,当23点后,农历要计为次日
60
+ CDateTime handled = datetime;
61
+ if (datetime.time_ .h_ == 23 ) {
62
+ next (handled);
63
+ handled.time_ .h_ = 0 ;
64
+ }
65
+ mcopy (handled, dt_);
60
66
CDate sdate;
61
67
sdate.year_ = 1900 ;
62
68
sdate.mon_ = 1 ;
@@ -156,6 +162,7 @@ bool CCalenderV1::set_datetime(const CDateTime& datetime)
156
162
get_ym_gz ();
157
163
get_hour_gz ();
158
164
165
+ mcopy (datetime, dt_);
159
166
return true ;
160
167
}
161
168
@@ -439,18 +446,18 @@ void CCalenderV1::pre_day(const CDateTime& datetime, CDateTime& outtime)
439
446
}
440
447
outtime.date_ .mon_ = m - 1 ;
441
448
switch (outtime.date_ .mon_ ) {
442
- case 3 :
443
- case 5 :
444
- case 7 :
445
- case 8 :
446
- case 10 : {
447
- outtime.date_ .day_ = 31 ;
448
- break ;
449
- }
450
- default : {
451
- outtime.date_ .day_ = 30 ;
452
- break ;
453
- }
449
+ case 3 :
450
+ case 5 :
451
+ case 7 :
452
+ case 8 :
453
+ case 10 : {
454
+ outtime.date_ .day_ = 31 ;
455
+ break ;
456
+ }
457
+ default : {
458
+ outtime.date_ .day_ = 30 ;
459
+ break ;
460
+ }
454
461
}
455
462
return ;
456
463
}
@@ -495,61 +502,61 @@ void CCalenderV1::get_diff_sec(const CDateTime& basetime, CDateTime& outtime, lo
495
502
--year;
496
503
}
497
504
switch (mon) {
498
- case 4 :
499
- case 6 :
500
- case 9 :
501
- case 11 : {
502
- day = 30 ;
503
- break ;
504
- }
505
- case 2 : {
506
- if (CCalender::is_leap (year)) {
507
- day = 29 ;
508
- } else {
509
- day = 28 ;
510
- }
511
- break ;
512
- }
513
- default : {
514
- day = 31 ;
515
- break ;
516
- }
517
- }
518
- }
519
- } else {
520
- ++day;
521
- switch (mon) {
522
505
case 4 :
523
506
case 6 :
524
507
case 9 :
525
508
case 11 : {
526
- if (day == 31 ) {
527
- day = 1 ;
528
- ++mon;
529
- }
509
+ day = 30 ;
530
510
break ;
531
511
}
532
512
case 2 : {
533
513
if (CCalender::is_leap (year)) {
534
- if (day == 30 ) {
535
- day = 1 ;
536
- ++mon;
537
- }
514
+ day = 29 ;
538
515
} else {
539
- if (day == 29 ) {
540
- day = 1 ;
541
- ++mon;
542
- }
516
+ day = 28 ;
543
517
}
544
518
break ;
545
519
}
546
520
default : {
547
- if (day == 32 ) {
521
+ day = 31 ;
522
+ break ;
523
+ }
524
+ }
525
+ }
526
+ } else {
527
+ ++day;
528
+ switch (mon) {
529
+ case 4 :
530
+ case 6 :
531
+ case 9 :
532
+ case 11 : {
533
+ if (day == 31 ) {
534
+ day = 1 ;
535
+ ++mon;
536
+ }
537
+ break ;
538
+ }
539
+ case 2 : {
540
+ if (CCalender::is_leap (year)) {
541
+ if (day == 30 ) {
548
542
day = 1 ;
549
543
++mon;
550
544
}
551
- break ;
545
+ } else {
546
+ if (day == 29 ) {
547
+ day = 1 ;
548
+ ++mon;
549
+ }
550
+ }
551
+ break ;
552
+ }
553
+ default : {
554
+ if (day == 32 ) {
555
+ day = 1 ;
556
+ ++mon;
552
557
}
558
+ break ;
559
+ }
553
560
}
554
561
if (mon == 13 ) {
555
562
mon = 1 ;
@@ -639,32 +646,32 @@ int CCalenderV1::get_days_from_base(const CDate& date)
639
646
}
640
647
for (int i = 1 ; i < m; ++i) {
641
648
switch (i) {
642
- case 1 :
643
- case 3 :
644
- case 5 :
645
- case 7 :
646
- case 8 :
647
- case 10 :
648
- case 12 :
649
- nm += 31 ;
650
- break ;
651
- case 4 :
652
- case 6 :
653
- case 9 :
654
- case 11 :
655
- nm += 30 ;
656
- break ;
657
- case 2 : {
658
- if (CCalender::is_leap (y)) {
659
- nm += 29 ;
660
- } else {
661
- nm += 28 ;
662
- }
663
- break ;
664
- }
665
- default : {
666
- break ;
649
+ case 1 :
650
+ case 3 :
651
+ case 5 :
652
+ case 7 :
653
+ case 8 :
654
+ case 10 :
655
+ case 12 :
656
+ nm += 31 ;
657
+ break ;
658
+ case 4 :
659
+ case 6 :
660
+ case 9 :
661
+ case 11 :
662
+ nm += 30 ;
663
+ break ;
664
+ case 2 : {
665
+ if (CCalender::is_leap (y)) {
666
+ nm += 29 ;
667
+ } else {
668
+ nm += 28 ;
667
669
}
670
+ break ;
671
+ }
672
+ default : {
673
+ break ;
674
+ }
668
675
}
669
676
}
670
677
nd = d - 1 ;
@@ -679,32 +686,32 @@ int CCalenderV1::get_days_from_base(const CDate& date)
679
686
}
680
687
for (int i = 1 ; i < m; ++i) {
681
688
switch (i) {
682
- case 1 :
683
- case 3 :
684
- case 5 :
685
- case 7 :
686
- case 8 :
687
- case 10 :
688
- case 12 :
689
- nm += 31 ;
690
- break ;
691
- case 4 :
692
- case 6 :
693
- case 9 :
694
- case 11 :
695
- nm += 30 ;
696
- break ;
697
- case 2 : {
698
- if (CCalender::is_leap (y)) {
699
- nm += 29 ;
700
- } else {
701
- nm += 28 ;
702
- }
703
- break ;
704
- }
705
- default : {
706
- break ;
689
+ case 1 :
690
+ case 3 :
691
+ case 5 :
692
+ case 7 :
693
+ case 8 :
694
+ case 10 :
695
+ case 12 :
696
+ nm += 31 ;
697
+ break ;
698
+ case 4 :
699
+ case 6 :
700
+ case 9 :
701
+ case 11 :
702
+ nm += 30 ;
703
+ break ;
704
+ case 2 : {
705
+ if (CCalender::is_leap (y)) {
706
+ nm += 29 ;
707
+ } else {
708
+ nm += 28 ;
707
709
}
710
+ break ;
711
+ }
712
+ default : {
713
+ break ;
714
+ }
708
715
}
709
716
}
710
717
nd = d - 1 ;
@@ -727,28 +734,28 @@ void CCalenderV1::next_day(const CDateTime& datetime, CDateTime& outtime)
727
734
728
735
int nDay = 0 ;
729
736
switch (m) {
730
- case 1 :
731
- case 3 :
732
- case 5 :
733
- case 7 :
734
- case 8 :
735
- case 10 :
736
- case 12 : {
737
- nDay = 31 ;
738
- break ;
739
- }
740
- case 2 : {
741
- if (CCalender::is_leap (y)) {
742
- nDay = 29 ;
743
- } else {
744
- nDay = 28 ;
745
- }
746
- break ;
747
- }
748
- default : {
749
- nDay = 30 ;
750
- break ;
737
+ case 1 :
738
+ case 3 :
739
+ case 5 :
740
+ case 7 :
741
+ case 8 :
742
+ case 10 :
743
+ case 12 : {
744
+ nDay = 31 ;
745
+ break ;
746
+ }
747
+ case 2 : {
748
+ if (CCalender::is_leap (y)) {
749
+ nDay = 29 ;
750
+ } else {
751
+ nDay = 28 ;
751
752
}
753
+ break ;
754
+ }
755
+ default : {
756
+ nDay = 30 ;
757
+ break ;
758
+ }
752
759
}
753
760
754
761
if (m <= 11 ) {
0 commit comments