@@ -153,7 +153,7 @@ public class JewishDate implements Comparable<JewishDate>, Cloneable {
153153 /** The number of <em>chalakim</em> (1080) in an hour.*/
154154 private static final int CHALAKIM_PER_HOUR = 1080 ;
155155 /** The number of <em>chalakim</em> (25,920) in a 24 hour day .*/
156- private static final int CHALAKIM_PER_DAY = 25920 ; // 24 * 1080
156+ private static final long CHALAKIM_PER_DAY = 25920 ; // 24 * 1080
157157 /** The number of <em>chalakim</em> in an average Jewish month. A month has 29 days, 12 hours and 793
158158 * <em>chalakim</em> (44 minutes and 3.3 seconds) for a total of 765,433 <em>chalakim</em>*/
159159 private static final long CHALAKIM_PER_MONTH = 765433 ; // (29 * 24 + 12) * 1080 + 793
@@ -336,23 +336,23 @@ boolean isGregorianLeapYear(int year) {
336336 * Returns the number of days in a given month in a given month and year.
337337 *
338338 * @param month
339- * the month. As with other cases in this class, this is 1-based, not zero-based.
339+ * the month.
340340 * @param year
341341 * the year (only impacts February)
342342 * @return the number of days in the month in the given year
343343 */
344344 private static int getLastDayOfGregorianMonth (int month , int year ) {
345345 switch (month ) {
346- case 2 :
346+ case Calendar . FEBRUARY :
347347 if ((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0 )) {
348348 return 29 ;
349349 } else {
350350 return 28 ;
351351 }
352- case 4 :
353- case 6 :
354- case 9 :
355- case 11 :
352+ case Calendar . APRIL :
353+ case Calendar . JUNE :
354+ case Calendar . SEPTEMBER :
355+ case Calendar . NOVEMBER :
356356 return 30 ;
357357 default :
358358 return 31 ;
@@ -365,11 +365,11 @@ private static int getLastDayOfGregorianMonth(int month, int year) {
365365 */
366366 private void absDateToDate (int absDate ) {
367367 int year = absDate / 366 ; // Search forward year by year from approximate year
368- while (absDate >= gregorianDateToAbsDate (year + 1 , 1 , 1 )) {
368+ while (absDate >= gregorianDateToAbsDate (year + 1 , Calendar . JANUARY , 1 )) {
369369 year ++;
370370 }
371371
372- int month = 1 ; // Search forward month by month from January
372+ int month = Calendar . JANUARY ; // Search forward month by month from January
373373 while (absDate > gregorianDateToAbsDate (year , month , getLastDayOfGregorianMonth (month , year ))) {
374374 month ++;
375375 }
@@ -401,14 +401,15 @@ public int getAbsDate() {
401401 */
402402 private static int gregorianDateToAbsDate (int year , int month , int dayOfMonth ) {
403403 int absDate = dayOfMonth ;
404- for (int m = month - 1 ; m > 0 ; m -- ) {
404+ for (int m = Calendar . JANUARY ; m < month ; m ++ ) {
405405 absDate += getLastDayOfGregorianMonth (m , year ); // days in prior months of the year
406406 }
407+ int yearPrevious = year - 1 ;
407408 return (absDate // days this year
408- + 365 * ( year - 1 ) // days in previous years ignoring leap days
409- + ( year - 1 ) / 4 // Julian leap days before this year
410- - ( year - 1 ) / 100 // minus prior century years
411- + ( year - 1 ) / 400 ); // plus prior years divisible by 400
409+ + 365 * yearPrevious // days in previous years ignoring leap days
410+ + yearPrevious / 4 // Julian leap days before this year
411+ - yearPrevious / 100 // minus prior century years
412+ + yearPrevious / 400 ); // plus prior years divisible by 400
412413 }
413414
414415 /**
@@ -460,8 +461,8 @@ private static int getLastMonthOfJewishYear(int year) {
460461 */
461462 public static int getJewishCalendarElapsedDays (int year ) {
462463 long chalakimSince = getChalakimSinceMoladTohu (year , TISHREI );
463- int moladDay = (int ) (chalakimSince / ( long ) CHALAKIM_PER_DAY );
464- int moladParts = (int ) (chalakimSince - moladDay * ( long ) CHALAKIM_PER_DAY );
464+ int moladDay = (int ) (chalakimSince / CHALAKIM_PER_DAY );
465+ int moladParts = (int ) (chalakimSince - moladDay * CHALAKIM_PER_DAY );
465466 // delay Rosh Hashana for the 4 dechiyos
466467 return addDechiyos (year , moladDay , moladParts );
467468 }
@@ -670,7 +671,7 @@ private static void validateGregorianDate(int year, int month, int dayOfMonth) {
670671 * {@link GregorianCalendar}, where {@link Calendar#JANUARY} has a value of 0.
671672 */
672673 private static void validateGregorianMonth (int month ) {
673- if (month > 11 || month < 0 ) {
674+ if (month > Calendar . DECEMBER || month < Calendar . JANUARY ) {
674675 throw new IllegalArgumentException ("The Gregorian month has to be between 0 - 11. " + month
675676 + " is invalid." );
676677 }
@@ -908,8 +909,8 @@ private static int moladToAbsDate(long chalakim) {
908909 public JewishDate (long molad ) {
909910 absDateToDate (moladToAbsDate (molad ));
910911 // long chalakimSince = getChalakimSinceMoladTohu(year, TISHREI);// tishrei
911- int conjunctionDay = ( int ) ( molad / ( long ) CHALAKIM_PER_DAY ) ;
912- int conjunctionParts = (int ) (molad - conjunctionDay * ( long ) CHALAKIM_PER_DAY );
912+ long conjunctionDay = molad / CHALAKIM_PER_DAY ;
913+ int conjunctionParts = (int ) (molad - conjunctionDay * CHALAKIM_PER_DAY );
913914 setMoladTime (conjunctionParts );
914915 }
915916
@@ -1042,13 +1043,10 @@ public void setDate(Calendar calendar) {
10421043 throw new IllegalArgumentException ("Calendars with a BC era are not supported. The year "
10431044 + calendar .get (Calendar .YEAR ) + " BC is invalid." );
10441045 }
1045- gregorianMonth = calendar .get (Calendar .MONTH ) + 1 ;
1046- gregorianDayOfMonth = calendar .get (Calendar .DATE );
1047- gregorianYear = calendar .get (Calendar .YEAR );
1048- gregorianAbsDate = gregorianDateToAbsDate (gregorianYear , gregorianMonth , gregorianDayOfMonth ); // init the date
1049- absDateToJewishDate ();
1050-
1051- dayOfWeek = Math .abs (gregorianAbsDate % 7 ) + 1 ; // set day of week
1046+ int month = calendar .get (Calendar .MONTH );
1047+ int dayOfMonth = calendar .get (Calendar .DATE );
1048+ int year = calendar .get (Calendar .YEAR );
1049+ setInternalGregorianDate (year , month , dayOfMonth );
10521050 }
10531051
10541052 /**
@@ -1095,7 +1093,7 @@ public void setDate(LocalDate localDate) {
10951093 */
10961094 public void setGregorianDate (int year , int month , int dayOfMonth ) {
10971095 validateGregorianDate (year , month , dayOfMonth );
1098- setInternalGregorianDate (year , month + 1 , dayOfMonth );
1096+ setInternalGregorianDate (year , month , dayOfMonth );
10991097 }
11001098
11011099 /**
@@ -1110,15 +1108,16 @@ public void setGregorianDate(int year, int month, int dayOfMonth) {
11101108 */
11111109 private void setInternalGregorianDate (int year , int month , int dayOfMonth ) {
11121110 // make sure date is a valid date for the given month, if not, set to last day of month
1113- if (dayOfMonth > getLastDayOfGregorianMonth (month , year )) {
1114- dayOfMonth = getLastDayOfGregorianMonth (month , year );
1111+ int lastDayOfMonth = getLastDayOfGregorianMonth (month , year );
1112+ if (dayOfMonth > lastDayOfMonth ) {
1113+ dayOfMonth = lastDayOfMonth ;
11151114 }
11161115 // init month, date, year
11171116 gregorianMonth = month ;
11181117 gregorianDayOfMonth = dayOfMonth ;
11191118 gregorianYear = year ;
11201119
1121- gregorianAbsDate = gregorianDateToAbsDate (gregorianYear , gregorianMonth , gregorianDayOfMonth ); // init date
1120+ gregorianAbsDate = gregorianDateToAbsDate (year , month , dayOfMonth ); // init date
11221121 absDateToJewishDate ();
11231122
11241123 dayOfWeek = Math .abs (gregorianAbsDate % 7 ) + 1 ; // set day of week
@@ -1267,9 +1266,9 @@ public void forward(int field, int amount) {
12671266 if (gregorianDayOfMonth == getLastDayOfGregorianMonth (gregorianMonth , gregorianYear )) {
12681267 gregorianDayOfMonth = 1 ;
12691268 // if last day of year
1270- if (gregorianMonth == 12 ) {
1269+ if (gregorianMonth == Calendar . DECEMBER ) {
12711270 gregorianYear ++;
1272- gregorianMonth = 1 ;
1271+ gregorianMonth = Calendar . JANUARY ;
12731272 } else {
12741273 gregorianMonth ++;
12751274 }
@@ -1357,8 +1356,8 @@ private void forwardJewishMonth(int amount) {
13571356 public void back () {
13581357 // Change Gregorian date
13591358 if (gregorianDayOfMonth == 1 ) { // if first day of month
1360- if (gregorianMonth == 1 ) { // if first day of year
1361- gregorianMonth = 12 ;
1359+ if (gregorianMonth == Calendar . JANUARY ) { // if first day of year
1360+ gregorianMonth = Calendar . DECEMBER ;
13621361 gregorianYear --;
13631362 } else {
13641363 gregorianMonth --;
@@ -1421,7 +1420,7 @@ public int compareTo(JewishDate jewishDate) {
14211420 * @return the Gregorian month (between 0-11). Like the java.util.Calendar, months are 0 based.
14221421 */
14231422 public int getGregorianMonth () {
1424- return gregorianMonth - 1 ;
1423+ return gregorianMonth ;
14251424 }
14261425
14271426 /**
@@ -1491,7 +1490,7 @@ public int getDayOfWeek() {
14911490 */
14921491 public void setGregorianMonth (int month ) {
14931492 validateGregorianMonth (month );
1494- setInternalGregorianDate (gregorianYear , month + 1 , gregorianDayOfMonth );
1493+ setInternalGregorianDate (gregorianYear , month , gregorianDayOfMonth );
14951494 }
14961495
14971496 /**
0 commit comments