# # %i% # # The test cases in this file assume the first day of week is Sunday # and the minimal days in the first week is 1. locale ja JP JP new instance jcal timezone Asia/Tokyo new instance tokyocal set non-lenient test add ERA use jcal clear all set date Reiwa 17 Mar 8 add era 10 # as of Reiwa 17 March 8 check era Reiwa add era -100 check era BeforeMeiji test add HOUR_OF_DAY use jcal clear all set era Heisei set datetime 1 Jan 8 23 59 59 add hour_of_day 1 check datetime 1 Jan 9 0 59 59 check ampm AM check hour 0 add hour_of_day -1 check datetime 1 Jan 8 23 59 59 add hour_of_day 24 check datetime 1 Jan 9 23 59 59 add hour_of_day -24 check datetime 1 Jan 8 23 59 59 test add HOUR use jcal clear all set era Showa set datetime 64 Jan 7 11 59 59 check era Showa check hour 11 check ampm AM add hour 1 check hour 0 check ampm PM check datetime 64 Jan 7 12 59 59 add hour -1 check datetime 64 Jan 7 11 59 59 add hour 240 check era Heisei check datetime 1 Jan 17 11 59 59 add hour -240 check era Showa check datetime 64 Jan 7 11 59 59 clear all set era Showa set datetime 64 Jan 7 23 59 59 check era Showa check hour 11 check ampm PM add hour 1 check hour 0 check ampm AM check era Heisei check datetime 1 Jan 8 0 59 59 add hour -1 check datetime 64 Jan 7 23 59 59 add hour 240 check era Heisei check datetime 1 Jan 17 23 59 59 add hour -240 check era Showa check datetime 64 Jan 7 23 59 59 clear all set era Heisei set datetime 1 Jan 8 23 59 59 check date Heisei 1 Jan 8 check hour 11 check ampm PM add hour 1 check hour 0 check ampm AM check era Heisei check datetime 1 Jan 9 0 59 59 add hour -1 check datetime 1 Jan 8 23 59 59 add hour 240 check datetime 1 Jan 18 23 59 59 add hour -240 check datetime 1 Jan 8 23 59 59 test add YEAR use jcal clear all # check if pinDayOfMonth works correctly. # Heisei 12 (Y2K) is a leap year. set date Heisei 12 Feb 29 add year 5 check date Heisei 17 Feb 28 add year -5 check date Heisei 12 Feb 28 # not 29! clear all set date BeforeMeiji 1867 Jan 1 add year 1 check date Meiji 1 Jan 1 add year -1 check date BeforeMeiji 1867 Jan 1 clear all set date Meiji 45 Jul 29 add year 1 check date Taisho 2 Jul 29 add year -1 check date Meiji 45 Jul 29 clear all set date Meiji 44 Jul 30 add year 1 check date Taisho 1 Jul 30 add year -1 check date Meiji 44 Jul 30 clear all set date Taisho 15 Aug 1 add year 1 check date Showa 2 Aug 1 add year -1 check date Taisho 15 Aug 1 clear all set date Taisho 14 Dec 31 add year 1 check date Showa 1 Dec 31 add year -1 check date Taisho 14 Dec 31 clear all set date Showa 63 Feb 1 add year 1 check date Heisei 1 Feb 1 add year -1 check date Showa 63 Feb 1 set date Showa 63 Dec 30 add year 1 check date Heisei 1 Dec 30 add year -1 check date Showa 63 Dec 30 set date Showa 64 Jan 7 add year 1 check date Heisei 2 Jan 7 add year -1 check date Showa 64 Jan 7 set date Heisei 2 Jan 7 add year -1 check date Showa 64 Jan 7 add year 1 check date Heisei 2 Jan 7 test add MONTH clear all # Check pinDayOfMonth works correctly. # Heisei 12 is a leap year. set date Heisei 12 Jan 31 add month 1 check date Heisei 12 Feb 29 add month -1 check date Heisei 12 Jan 29 # Another leap year set date Showa 63 Jan 31 add month 1 check date Showa 63 Feb 29 add month -1 check date Showa 63 Jan 29 # Non leap year set date Heisei 15 Jan 31 add month 1 check date Heisei 15 Feb 28 add month -1 check date Heisei 15 Jan 28 set date Heisei 15 Mar 31 add month 1 check date Heisei 15 Apr 30 add month -1 check date Heisei 15 Mar 30 set date Heisei 15 May 31 add month 1 check date Heisei 15 Jun 30 add month -1 check date Heisei 15 May 30 set date Heisei 15 Aug 31 add month 1 check date Heisei 15 Sep 30 add month -1 check date Heisei 15 Aug 30 set date Heisei 15 Oct 31 add month 1 check date Heisei 15 Nov 30 add month -1 check date Heisei 15 Oct 30 set date Heisei 15 Dec 31 add month -1 check date Heisei 15 Nov 30 add month 1 check date Heisei 15 Dec 30 set date Heisei 15 Dec 31 add month 2 check date Heisei 16 Feb 29 add month -1 check date Heisei 16 Jan 29 # end of pinDayOfMonth tests set date BeforeMeiji 1867 Dec 1 add month 1 check date Meiji 1 Jan 1 add month -1 check date BeforeMeiji 1867 Dec 1 add month 14 check date Meiji 2 Feb 1 add month -14 check date BeforeMeiji 1867 Dec 1 set date Meiji 1 Dec 1 add month 1 check date Meiji 2 Jan 1 add month -1 check date Meiji 1 Dec 1 add month 13 check date Meiji 3 Jan 1 add month -13 check date Meiji 1 Dec 1 set date Meiji 45 Jun 30 add month 1 check date Taisho 1 Jul 30 add month -1 check date Meiji 45 Jun 30 set date Meiji 45 Jun 30 add month 14 check date Taisho 2 Aug 30 add month -14 check date Meiji 45 Jun 30 # Taisho Gan-nen (year 1) has only 6 months. set date Taisho 1 Jul 30 add month -1 check date Meiji 45 Jun 30 add month 1 check date Taisho 1 Jul 30 add month -18 check date Meiji 44 Jan 30 add month 18 check date Taisho 1 Jul 30 set date Taisho 15 Jan 20 add month 11 check date Taisho 15 Dec 20 set date Taisho 15 Jan 25 add month 11 check date Showa 1 Dec 25 set date Showa 1 Dec 25 add month 1 check date Showa 2 Jan 25 add month -1 check date Showa 1 Dec 25 add month 17 check date Showa 3 May 25 add month -17 check date Showa 1 Dec 25 set date Showa 64 Jan 7 add month 1 check date Heisei 1 Feb 7 set date Heisei 1 Feb 1 add month -1 # Heisei starts from Jan 8. check date Showa 64 Jan 1 add month 1 check date Heisei 1 Feb 1 set date Heisei 1 Feb 8 add month -1 check date Heisei 1 Jan 8 set date Heisei 1 Dec 1 add month 1 check date Heisei 2 Jan 1 add month -1 check date Heisei 1 Dec 1 set date Heisei 1 Dec 8 add month 1 check date Heisei 2 Jan 8 add month -1 check date Heisei 1 Dec 8 # time zone dependent tests use tokyocal clear all set date BeforeMeiji 1 Jan 1 get min year assign $result $minyear # actual min date: -292275055.05.17T01:47:04.192+0900 set date BeforeMeiji $minyear Dec 17 set timeofday 1 47 4 192 add month -7 check date BeforeMeiji $minyear May 17 check timeofday 1 47 4 192 add month 7 check date BeforeMeiji $minyear Dec 17 check timeofday 1 47 4 192 set date BeforeMeiji $minyear Dec 17 set timeofday 1 47 4 191 add month -7 check date BeforeMeiji $minyear May 18 check timeofday 1 47 4 191 set date Reiwa 17 Jan 1 get max year assign $result $max set date Reiwa $max Jul 17 add month 1 check date Reiwa $max Aug 17 # set date Heisei $max Jul 28 # set timeofday 23 59 59 999 # add month 1 # check date Heisei $max Aug 16 # check timeofday 23 59 59 999 test add WEEK_OF_YEAR use jcal clear all # 1867 Dec 23 is Monday. set date BeforeMeiji 1867 Dec 23 add week_of_year 2 check day_of_week Mon check date Meiji 1 Jan 6 add week_of_year -2 check day_of_week Mon check date BeforeMeiji 1867 Dec 23 # 1867 Dec 23 is Wednesday. set date Meiji 1 Dec 23 add week_of_year 2 check day_of_week Wed check date Meiji 2 Jan 6 add week_of_year -2 check day_of_week Wed check date Meiji 1 Dec 23 # Meiji 45 July 23 is Tuesday. set date Meiji 45 Jul 23 add week_of_year 1 check day_of_week Tue check date Taisho 1 Jul 30 add week_of_year -1 check day_of_week Tue check date Meiji 45 Jul 23 # Taisho 15 December 23 is Thursday. set date Taisho 15 Dec 23 add week_of_year 1 check day_of_week Thu check date Showa 1 Dec 30 add week_of_year -1 check day_of_week Thu check date Taisho 15 Dec 23 # Showa Gan-nen December 30 is Thursday. Showa Gan-nen has # only one week. Rolling any number of weeks brings to the # same date. set date Showa 1 Dec 30 add week_of_year 1 check day_of_week Thu check date Showa 2 Jan 6 add week_of_year -1 check day_of_week Thu check date Showa 1 Dec 30 # Showa 64 January 7 is Saturday. The year has only one week. set date Showa 64 Jan 7 add week_of_year 1 check day_of_week Sat check date Heisei 1 Jan 14 add week_of_year -1 check day_of_week Sat check date Showa 64 Jan 7 use tokyocal clear all set date BeforeMeiji $minyear Dec 25 check day_of_week Sat eval $minyear + 1 assign $result $minyear_plus_1 add week_of_year 1 check day_of_week Sat check date BeforeMeiji $minyear_plus_1 Jan 1 add week_of_year -1 check day_of_week Sat check date BeforeMeiji $minyear Dec 25 test WEEK_OF_MONTH use jcal clear all test DAY_OF_MONTH use jcal clear all test DAY_OF_YEAR use jcal clear all # 1867 is a regular Gregorian year. set date BeforeMeiji 1867 Dec 31 add day_of_year 1 check date Meiji 1 Jan 1 add day_of_year -1 check date BeforeMeiji 1867 Dec 31 add day_of_year 26 check date Meiji 1 Jan 26 add day_of_year -26 check date BeforeMeiji 1867 Dec 31 # Meiji 1 starts from Jan 1. It's a regular year as well. set date Meiji 1 Dec 31 add day_of_year 1 check date Meiji 2 Jan 1 add day_of_year -1 check date Meiji 1 Dec 31 add day_of_year 26 check date Meiji 2 Jan 26 add day_of_year -26 check date Meiji 1 Dec 31 # The last year of Meiji (45) has an irregularity. Meiji 45 # July 30 is actually Taisho 1 July 30. set date Meiji 45 Jul 29 add day_of_year 1 check date Taisho 1 Jul 30 add day_of_year -1 check date Meiji 45 Jul 29 # The first day of Taisho, July 30. set date Taisho 1 Jul 30 add day_of_year -1 check date Meiji 45 Jul 29 add day_of_year 1 check date Taisho 1 Jul 30 set date Taisho 15 Dec 24 add day_of_year 1 check date Showa 1 Dec 25 add day_of_year -1 check date Taisho 15 Dec 24 set date Showa 1 Dec 31 add day_of_year 1 check date Showa 2 Jan 1 add day_of_year -1 check date Showa 1 Dec 31 add day_of_year 25 check date Showa 2 Jan 25 add day_of_year -25 check date Showa 1 Dec 31 set date Showa 64 Jan 7 add day_of_year 1 check date Heisei 1 Jan 8 add day_of_year -1 check date Showa 64 Jan 7 set date Heisei 1 Dec 31 add day_of_year 5 check date Heisei 2 Jan 5 add day_of_year -5 check date Heisei 1 Dec 31 use tokyocal clear all set date BeforeMeiji $minyear Dec 31 set timeofday 1 47 4 192 add day_of_year 1 check date BeforeMeiji $minyear_plus_1 Jan 1 check timeofday 1 47 4 192 add day_of_year -1 check date BeforeMeiji $minyear Dec 31 check timeofday 1 47 4 192 test DAY_OF_WEEK_IN_MONTH use jcal clear all