1 # 2 # 3 # 4 5 # The test cases in this file assume that the first day of week is Sunday 6 # and the minimal days in the first week is 1. 7 8 locale ja JP JP 9 new instance jcal 10 11 timezone Asia/Tokyo 12 new instance tokyocal 13 14 test roll HOUR_OF_DAY 15 use jcal 16 clear all 17 set era Heisei 18 set datetime 1 Jan 8 23 59 59 19 roll hour_of_day 1 20 check datetime 1 Jan 8 0 59 59 21 check ampm AM 22 check hour 0 23 roll hour_of_day -1 24 check datetime 1 Jan 8 23 59 59 25 roll hour_of_day 240 26 check datetime 1 Jan 8 23 59 59 27 roll hour_of_day -240 28 check datetime 1 Jan 8 23 59 59 29 30 test roll HOUR 31 use jcal 32 clear all 33 set era Showa 34 set datetime 64 Jan 7 11 59 59 35 get ampm 36 check era Showa 37 check hour 11 38 check ampm AM 39 roll hour 1 40 check hour 0 41 check ampm AM 42 check datetime 64 Jan 7 0 59 59 43 roll hour -1 44 check datetime 64 Jan 7 11 59 59 45 roll hour 240 46 check datetime 64 Jan 7 11 59 59 47 roll hour -240 48 check datetime 64 Jan 7 11 59 59 49 50 clear all 51 set era Showa 52 set datetime 64 Jan 7 23 59 59 53 get ampm 54 check era Showa 55 check hour 11 56 check ampm PM 57 roll hour 1 58 check hour 0 59 check ampm PM 60 check datetime 64 Jan 7 12 59 59 61 roll hour -1 62 check datetime 64 Jan 7 23 59 59 63 roll hour 240 64 check datetime 64 Jan 7 23 59 59 65 roll hour -240 66 check datetime 64 Jan 7 23 59 59 67 68 clear all 69 set era Heisei 70 set datetime 1 Jan 8 23 59 59 71 get ampm 72 check hour 11 73 check ampm PM 74 roll hour 1 75 check hour 0 76 check ampm PM 77 check datetime 1 Jan 8 12 59 59 78 roll hour -1 79 check datetime 1 Jan 8 23 59 59 80 roll hour 240 81 check datetime 1 Jan 8 23 59 59 82 roll hour -240 83 check datetime 1 Jan 8 23 59 59 84 85 test roll YEAR 86 clear all 87 set date BeforeMeiji 1867 Jan 1 88 get actualmin year 89 # roll to the min year value of Gregorian (not Julian) 90 roll year 1 91 check date BeforeMeiji $result Jan 1 92 roll year -1 93 check date BeforeMeiji 1867 Jan 1 94 95 clear all 96 set date Meiji 45 Jul 29 97 roll year 1 98 check date Meiji 1 Jul 29 99 roll year -1 100 check date Meiji 45 Jul 29 101 102 clear all 103 set date Meiji 44 Jul 30 104 roll year 1 105 check date Meiji 1 Jul 30 106 roll year -1 107 check date Meiji 44 Jul 30 108 109 clear all 110 set date Taisho 15 Aug 1 111 roll year 1 112 check date Taisho 1 Aug 1 113 roll year -1 114 check date Taisho 15 Aug 1 115 116 clear all 117 set date Taisho 14 Dec 31 118 roll year 1 119 check date Taisho 1 Dec 31 120 roll year -1 121 check date Taisho 14 Dec 31 122 123 clear all 124 set date Showa 63 Feb 1 125 # Neither 64 Feb 1 nor 1 Feb 1 exists in Showa. 126 roll year 1 127 check date Showa 2 Feb 1 128 roll year -1 129 check date Showa 63 Feb 1 130 131 set date Showa 63 Dec 30 132 roll year 1 133 # Showa 1 Dec 30 exists. 134 check date Showa 1 Dec 30 135 roll year -1 136 check date Showa 63 Dec 30 137 138 set date Showa 64 Jan 7 139 roll year 1 140 check date Showa 2 Jan 7 141 roll year -1 142 check date Showa 64 Jan 7 143 144 set date Heisei 31 Apr 30 145 roll year 1 146 check date Heisei 1 Apr 30 147 roll year -1 148 check date Heisei 31 Apr 30 149 150 set date NewEra 2 Apr 30 151 get max year 152 assign $result $hmax 153 roll year -1 154 check date NewEra $hmax Apr 30 155 roll year 1 156 check date NewEra 2 Apr 30 157 158 test roll MONTH 159 set date BeforeMeiji 1867 Dec 1 160 roll month 1 161 check date BeforeMeiji 1867 Jan 1 162 roll month -1 163 check date BeforeMeiji 1867 Dec 1 164 roll month 14 165 check date BeforeMeiji 1867 Feb 1 166 roll month -14 167 check date BeforeMeiji 1867 Dec 1 168 169 set date Meiji 1 Dec 1 170 roll month 1 171 check date Meiji 1 Jan 1 172 roll month -1 173 check date Meiji 1 Dec 1 174 roll month 13 175 check date Meiji 1 Jan 1 176 roll month -13 177 check date Meiji 1 Dec 1 178 179 set date Meiji 45 Jun 30 180 roll month 1 181 # Meiji 45 Jun 30 is actually Taisho 1 Jun 30. By the rule of 182 # roll() that year can't be changed, the day of month value 183 # has to be changed ("pin date to month"). 184 check date Meiji 45 Jul 29 185 roll month -1 186 # doesn't roll back to Jun 30, but to Jun 29. 187 check date Meiji 45 Jun 29 188 189 set date Meiji 45 Jun 30 190 # Meiji 45 (year) has only 7 months. rolling 14 months must 191 # bring the given date to the same date. 192 roll month 14 193 check date Meiji 45 Jun 30 194 roll month -14 195 check date Meiji 45 Jun 30 196 197 # Taisho Gan-nen (year 1) has only 6 months. 198 set date Taisho 1 Jul 30 199 roll month -1 200 check date Taisho 1 Dec 30 201 roll month 1 202 check date Taisho 1 Jul 30 203 roll month -18 204 check date Taisho 1 Jul 30 205 roll month 18 206 check date Taisho 1 Jul 30 207 208 set date Taisho 15 Jan 20 209 roll month 11 210 check date Taisho 15 Dec 20 211 212 set date Taisho 15 Jan 25 213 roll month 11 214 # Taisho 15 Dec 25 is actually Showa 1 Dec 25. Day of month is 215 # adjusted to the last day of month. ("pin date to month") 216 check date Taisho 15 Dec 24 217 218 set date Showa 1 Dec 25 219 roll month 1 220 check date Showa 1 Dec 25 221 roll month -1 222 check date Showa 1 Dec 25 223 roll month 17 224 check date Showa 1 Dec 25 225 roll month -17 226 check date Showa 1 Dec 25 227 228 set date Showa 64 Jan 7 229 roll month 1 230 check date Showa 64 Jan 7 231 232 set date Heisei 1 Feb 1 233 roll month -1 234 # Heisei starts from Jan 8. 235 check date Heisei 1 Jan 8 236 roll month 1 237 check date Heisei 1 Feb 8 238 239 set date Heisei 1 Feb 8 240 roll month -1 241 check date Heisei 1 Jan 8 242 243 set date Heisei 1 Dec 1 244 roll month 1 245 check date Heisei 1 Jan 8 246 roll month -1 247 check date Heisei 1 Dec 8 248 249 set date Heisei 1 Dec 8 250 roll month 1 251 check date Heisei 1 Jan 8 252 roll month -1 253 check date Heisei 1 Dec 8 254 255 # time zone dependent tests 256 use tokyocal 257 clear all 258 259 set date BeforeMeiji 1 Jan 1 260 get min year 261 assign $result $minyear 262 # actual min date: -292275055.05.17T01:47:04.192+0900 263 set date BeforeMeiji $minyear Dec 31 264 roll month 1 265 check date BeforeMeiji $minyear May 31 266 267 set date BeforeMeiji $minyear Dec 1 268 set timeofday 1 47 4 192 269 roll month 1 270 check date BeforeMeiji $minyear May 17 271 check timeofday 1 47 4 192 272 273 set date BeforeMeiji $minyear Dec 1 274 set timeofday 1 47 4 191 275 roll month 1 276 check date BeforeMeiji $minyear May 18 277 check timeofday 1 47 4 191 278 279 set date NewEra 17 Jan 1 280 get max year 281 assign $result $max 282 set date NewEra $max Jul 28 283 roll month 1 284 check date NewEra $max Aug 17 285 set date NewEra $max Jul 28 286 set timeofday 23 59 59 999 287 roll month 1 288 check date NewEra $max Aug 16 289 check timeofday 23 59 59 999 290 291 test roll WEEK_OF_YEAR 292 use jcal 293 clear all 294 # 1867 Dec 23 is Monday. 295 set date BeforeMeiji 1867 Dec 23 296 roll week_of_year 1 297 check day_of_week Mon 298 check date BeforeMeiji 1867 Jan 7 299 roll week_of_year -1 300 check day_of_week Mon 301 check date BeforeMeiji 1867 Dec 23 302 roll week_of_year 26 303 check day_of_week Mon 304 check date BeforeMeiji 1867 Jul 1 305 roll week_of_year -26 306 check day_of_week Mon 307 check date BeforeMeiji 1867 Dec 23 308 309 # 1867 Dec 23 is Wednesday. 310 set date Meiji 1 Dec 23 311 roll week_of_year 1 312 check day_of_week Wed 313 check date Meiji 1 Jan 1 314 roll week_of_year -1 315 check day_of_week Wed 316 check date Meiji 1 Dec 23 317 roll week_of_year 26 318 check day_of_week Wed 319 check date Meiji 1 Jun 24 320 roll week_of_year -26 321 check day_of_week Wed 322 check date Meiji 1 Dec 23 323 324 # Meiji 45 July 22 is Monday. 325 set date Meiji 45 Jul 22 326 # the next week if the first week of Taisho 1 327 roll week_of_year 1 328 check day_of_week Mon 329 check date Meiji 45 Jan 1 330 roll week_of_year -1 331 check day_of_week Mon 332 check date Meiji 45 Jul 22 333 roll week_of_year 26 334 check day_of_week Mon 335 check date Meiji 45 Jun 24 336 337 # Taisho Gan-nen (year 1) July 30 is Tuesday. 338 set date Taisho 1 Jul 30 339 roll week_of_year -1 340 # Taisho Gen-nen December 31 is the first week of the next year. 341 check day_of_week Tue 342 check date Taisho 1 Dec 24 343 roll week_of_year 1 344 check day_of_week Tue 345 check date Taisho 1 Jul 30 346 roll week_of_year 26 347 check day_of_week Tue 348 check date Taisho 1 Aug 27 349 roll week_of_year -26 350 check day_of_week Tue 351 check date Taisho 1 Jul 30 352 353 # Taisho 15 January 7 is Thursday. 354 set date Taisho 15 Jan 7 355 roll week_of_year -1 356 check day_of_week Thu 357 check date Taisho 15 Dec 16 358 roll week_of_year 1 359 check day_of_week Thu 360 check date Taisho 15 Jan 7 361 362 roll week_of_year 51 363 check day_of_week Thu 364 check date Taisho 15 Jan 14 365 366 # Showa Gan-nen December 30 is Thursday. Showa Gan-nen has 367 # only one week. Rolling any number of weeks brings to the 368 # same date. 369 set date Showa 1 Dec 30 370 roll week_of_year 1 371 check day_of_week Thu 372 check date Showa 1 Dec 30 373 roll week_of_year -1 374 check day_of_week Thu 375 check date Showa 1 Dec 30 376 roll week_of_year 26 377 check day_of_week Thu 378 check date Showa 1 Dec 30 379 roll week_of_year -26 380 check day_of_week Thu 381 check date Showa 1 Dec 30 382 383 # Showa 64 January 7 is Saturday. The year has only one week. 384 set date Showa 64 Jan 7 385 roll week_of_year 1 386 check day_of_week Sat 387 check date Showa 64 Jan 7 388 roll week_of_year -1 389 check day_of_week Sat 390 check date Showa 64 Jan 7 391 roll week_of_year 26 392 check day_of_week Sat 393 check date Showa 64 Jan 7 394 roll week_of_year -26 395 check day_of_week Sat 396 check date Showa 64 Jan 7 397 398 # Heisei Gan-nen January 14 is Saturday. 399 set date Heisei 1 Jan 14 400 roll week_of_year -1 401 check day_of_week Sat 402 check date Heisei 1 Dec 30 403 roll week_of_year 1 404 check day_of_week Sat 405 check date Heisei 1 Jan 14 406 roll week_of_year -26 407 check day_of_week Sat 408 check date Heisei 1 Jul 8 409 roll week_of_year 26 410 check day_of_week Sat 411 check date Heisei 1 Jan 14 412 413 # Heisei Gan-nen December 1 is Friday. 414 set date Heisei 1 Dec 1 415 roll week_of_year 5 416 check day_of_week Fri 417 check date Heisei 1 Jan 13 418 roll week_of_year -5 419 check day_of_week Fri 420 check date Heisei 1 Dec 1 421 roll week_of_year 55 422 check day_of_week Fri 423 check date Heisei 1 Dec 29 424 425 use tokyocal 426 clear all 427 428 set date BeforeMeiji $minyear Dec 25 429 check day_of_week Sat 430 roll week_of_year 1 431 check day_of_week Sat 432 check date BeforeMeiji $minyear May 22 433 roll week_of_year -1 434 check day_of_week Sat 435 check date BeforeMeiji $minyear Dec 25 436 437 test WEEK_OF_MONTH 438 # Needs to wait for 6191841 fix. (WEEK_OF_MONTH needs to change 439 # ERA and YEAR in a transition month.) 440 441 test DAY_OF_MONTH 442 # Needs to wait for 6191841 fix. (DAY_OF_MONTH needs to change 443 # ERA and YEAR in a transition month.) 444 445 test DAY_OF_YEAR 446 use jcal 447 clear all 448 449 # 1867 is a regular Gregorian year. 450 set date BeforeMeiji 1867 Dec 31 451 roll day_of_year 1 452 check date BeforeMeiji 1867 Jan 1 453 roll day_of_year -1 454 check date BeforeMeiji 1867 Dec 31 455 roll day_of_year 26 456 check date BeforeMeiji 1867 Jan 26 457 roll day_of_year -26 458 check date BeforeMeiji 1867 Dec 31 459 460 # Meiji 1 starts from Jan 1. It's a regular year as well. 461 set date Meiji 1 Dec 31 462 roll day_of_year 1 463 check date Meiji 1 Jan 1 464 roll day_of_year -1 465 check date Meiji 1 Dec 31 466 roll day_of_year 26 467 check date Meiji 1 Jan 26 468 roll day_of_year -26 469 check date Meiji 1 Dec 31 470 471 # The last year of Meiji (45) has an irregularity. Meiji 45 472 # July 30 is actually Taisho 1 July 30. 473 set date Meiji 45 Jul 29 474 roll day_of_year 1 475 check date Meiji 45 Jan 1 476 roll day_of_year -1 477 check date Meiji 45 Jul 29 478 roll day_of_year 26 479 check date Meiji 45 Jan 26 480 roll day_of_year -26 481 check date Meiji 45 Jul 29 482 483 # The first day of Taisho, July 30. 484 set date Taisho 1 Jul 30 485 roll day_of_year -1 486 check date Taisho 1 Dec 31 487 roll day_of_year 1 488 check date Taisho 1 Jul 30 489 roll day_of_year 26 490 check date Taisho 1 Aug 25 491 roll day_of_year -26 492 check date Taisho 1 Jul 30 493 494 set date Taisho 15 Jan 1 495 roll day_of_year -1 496 check date Taisho 15 Dec 24 497 roll day_of_year 1 498 check date Taisho 15 Jan 1 499 500 set date Showa 1 Dec 31 501 roll day_of_year 1 502 check date Showa 1 Dec 25 503 roll day_of_year -1 504 check date Showa 1 Dec 31 505 roll day_of_year 26 506 # 26 % 7 = 5 507 check date Showa 1 Dec 29 508 roll day_of_year -26 509 check date Showa 1 Dec 31 510 511 set date Showa 64 Jan 7 512 roll day_of_year 1 513 check date Showa 64 Jan 1 514 roll day_of_year -1 515 check date Showa 64 Jan 7 516 roll day_of_year 26 517 # 26 % 7 = 5 518 check date Showa 64 Jan 5 519 roll day_of_year -26 520 check date Showa 64 Jan 7 521 522 set date Heisei 1 Jan 8 523 roll day_of_year -1 524 check date Heisei 1 Dec 31 525 roll day_of_year 1 526 check date Heisei 1 Jan 8 527 roll day_of_year -26 528 check date Heisei 1 Dec 6 529 roll day_of_year 26 530 check date Heisei 1 Jan 8 531 532 set date Heisei 1 Dec 31 533 roll day_of_year 5 534 check date Heisei 1 Jan 12 535 roll day_of_year -5 536 check date Heisei 1 Dec 31 537 roll day_of_year 55 538 check date Heisei 1 Mar 3 539 roll day_of_year -55 540 check date Heisei 1 Dec 31 541 542 use tokyocal 543 clear all 544 545 set date BeforeMeiji $minyear Dec 31 546 set timeofday 1 47 4 192 547 roll day_of_year 1 548 check date BeforeMeiji $minyear May 17 549 check timeofday 1 47 4 192 550 roll day_of_year -1 551 check date BeforeMeiji $minyear Dec 31 552 check timeofday 1 47 4 192 553 554 test DAY_OF_WEEK_IN_MONTH 555 use jcal 556 clear all