Guest User

Untitled

a guest
Jan 16th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 KB | None | 0 0
  1. diff -urN Calendar-Japanese-Holiday-0.04/lib/Calendar/Japanese/Holiday.pm Calendar-Japanese-Holiday-0.05/lib/Calendar/Japanese/Holiday.pm
  2. --- Calendar-Japanese-Holiday-0.04/lib/Calendar/Japanese/Holiday.pm 2015-01-06 21:16:19.000000000 +0900
  3. +++ Calendar-Japanese-Holiday-0.05/lib/Calendar/Japanese/Holiday.pm 2019-01-16 18:58:24.355684960 +0900
  4. @@ -13,7 +13,7 @@
  5.  
  6. our @EXPORT = qw(getHolidays isHoliday);
  7.  
  8. -our $VERSION = '0.04';
  9. +our $VERSION = '0.05';
  10.  
  11.  
  12. our $FurikaeStr = '振替';
  13. @@ -156,6 +156,8 @@
  14. 198902 => {24 => '昭和天皇の大喪の礼'},
  15. 199011 => {12 => '即位礼正殿の儀'},
  16. 199306 => { 9 => '皇太子徳仁親王の結婚の儀'},
  17. + 201905 => { 1 => '天皇の即位'},
  18. + 201910 => {22 => '即位の礼正殿の儀'},
  19. );
  20.  
  21. my @daysInMonth = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  22. @@ -328,8 +330,40 @@
  23.  
  24. # 国民の休日
  25. if ($year >= 1986) {
  26. + # 月末日前と翌月月初の祝日が平日を挟んで国民の祝日になるケースに対応
  27. + my @added = ();
  28. + my $last_day = days_in_month($year, $mon);
  29. +
  30. + if ($holidays{$last_day - 1}) {
  31. +
  32. + my($next_year, $next_month) =
  33. + $mon == 12 ? ($year + 1, 1) : ($year, $mon + 1);
  34. +
  35. + if (isHoliday($next_year, $next_month, 1)) {
  36. + my $trailed = $last_day + 1;
  37. + push @added, $trailed;
  38. + $holidays{$trailed} = 1;
  39. + }
  40. + }
  41. +
  42. + # 2日と前月末日の祝日が平日を挟んで国民の祝日になるケース
  43. + if ($holidays{2}) {
  44. +
  45. + my($prev_year, $prev_month) =
  46. + $mon == 1 ? ($year - 1, 12) : ($year, $mon - 1);
  47. +
  48. + my $prev_last_day = days_in_month($prev_year, $prev_month);
  49. +
  50. + if (isHoliday($prev_year, $prev_month, $prev_last_day)) {
  51. + my $led = 0;
  52. + push @added, $led;
  53. + $holidays{$led} = 1;
  54. + }
  55. + }
  56. +
  57. # 祝日に挟まれた平日を探す (祝日A - 平日B - 祝日C)
  58. while (my ($day, $name) = each %holidays) {
  59. + next if $day < 1 || $day >= $last_day;
  60. if ( exists $holidays{$day + 2} &&
  61. !exists $holidays{$day + 1}) {
  62. my $wday = (localtime(timelocal(0, 0, 0,
  63. @@ -342,6 +376,22 @@
  64.  
  65. $holidays{$day + 1} = '国民の休日';
  66. }
  67. + if (exists $holidays{$day - 2} &&
  68. + !exists $holidays{$day - 1}) {
  69. + my $wday = (localtime(timelocal(0, 0, 0,
  70. + $day, $mon - 1, $year)))[6];
  71. + # 祝日Cの時は平日Bはただの振り替え休日
  72. + next if $wday == 2;
  73. +
  74. + # 平日Bが日曜の場合も国民の休日とはならない
  75. + next if $wday == 1;
  76. +
  77. + $holidays{$day - 1} = '国民の休日';
  78. + }
  79. + }
  80. +
  81. + if (@added) {
  82. + delete $holidays{$_} for @added;
  83. }
  84. }
  85.  
  86. diff -urN Calendar-Japanese-Holiday-0.04/t/Calendar-Japanese-Holiday.t Calendar-Japanese-Holiday-0.05/t/Calendar-Japanese-Holiday.t
  87. --- Calendar-Japanese-Holiday-0.04/t/Calendar-Japanese-Holiday.t 2015-01-06 21:51:15.000000000 +0900
  88. +++ Calendar-Japanese-Holiday-0.05/t/Calendar-Japanese-Holiday.t 2019-01-16 18:39:15.790670305 +0900
  89. @@ -2,7 +2,7 @@
  90.  
  91. use utf8;
  92.  
  93. -use Test::More tests => 60;
  94. +use Test::More tests => 64;
  95. BEGIN { use_ok('Calendar::Japanese::Holiday') };
  96.  
  97. #########################
  98. @@ -244,6 +244,22 @@
  99. ok(checkHoliday(1989, 1989, 2, 24, '昭和天皇の大喪の礼'), 'Exceptional');
  100. ok(checkHoliday(1990, 1990,11, 12, '即位礼正殿の儀'), 'Exceptional');
  101. ok(checkHoliday(1993, 1993, 6, 9, '皇太子徳仁親王の結婚の儀'), 'Exceptional');
  102. +ok(checkHoliday(2019, 2019, 5, 1, '天皇の即位'), 'Exceptional');
  103. +ok(checkHoliday(2019, 2019,10, 22, '即位の礼正殿の儀'), 'Exceptional');
  104. +
  105. +# 2019年天皇の即位前後の平日は皇室慶弔行事と祝日に挟まれた国民の休日
  106. +ok(cmpHash(getHolidays(2019, 4, 1),
  107. + {29 => '昭和の日',
  108. + 30 => '国民の休日'}),
  109. + "getHolidays - Kokumin-no-hi in April (2019)");
  110. +ok(cmpHash(getHolidays(2019, 5, 1),
  111. + {1 => '天皇の即位',
  112. + 2 => '国民の休日',
  113. + 3 => '憲法記念日',
  114. + 4 => 'みどりの日',
  115. + 5 => 'こどもの日',
  116. + 6 => '振替'}),
  117. + "getHolidays - Kokumin-no-hi in May (2019)");
  118.  
  119. ok(checkHoliday( $ST, 2015, 8, 11, ''), 'Yama(-2015)');
  120. ok(checkHoliday(2016, $ED, 8, 11, '山の日'), 'Yama(2016-2020)');
Add Comment
Please, Sign In to add comment