@@ -153,7 +153,7 @@ public class JewishDate implements Comparable<JewishDate>, Cloneable {
153
153
/** The number of <em>chalakim</em> (1080) in an hour.*/
154
154
private static final int CHALAKIM_PER_HOUR = 1080 ;
155
155
/** 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
157
157
/** The number of <em>chalakim</em> in an average Jewish month. A month has 29 days, 12 hours and 793
158
158
* <em>chalakim</em> (44 minutes and 3.3 seconds) for a total of 765,433 <em>chalakim</em>*/
159
159
private static final long CHALAKIM_PER_MONTH = 765433 ; // (29 * 24 + 12) * 1080 + 793
@@ -336,23 +336,23 @@ boolean isGregorianLeapYear(int year) {
336
336
* Returns the number of days in a given month in a given month and year.
337
337
*
338
338
* @param month
339
- * the month. As with other cases in this class, this is 1-based, not zero-based.
339
+ * the month.
340
340
* @param year
341
341
* the year (only impacts February)
342
342
* @return the number of days in the month in the given year
343
343
*/
344
344
private static int getLastDayOfGregorianMonth (int month , int year ) {
345
345
switch (month ) {
346
- case 2 :
346
+ case Calendar . FEBRUARY :
347
347
if ((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0 )) {
348
348
return 29 ;
349
349
} else {
350
350
return 28 ;
351
351
}
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 :
356
356
return 30 ;
357
357
default :
358
358
return 31 ;
@@ -365,11 +365,11 @@ private static int getLastDayOfGregorianMonth(int month, int year) {
365
365
*/
366
366
private void absDateToDate (int absDate ) {
367
367
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 )) {
369
369
year ++;
370
370
}
371
371
372
- int month = 1 ; // Search forward month by month from January
372
+ int month = Calendar . JANUARY ; // Search forward month by month from January
373
373
while (absDate > gregorianDateToAbsDate (year , month , getLastDayOfGregorianMonth (month , year ))) {
374
374
month ++;
375
375
}
@@ -401,14 +401,15 @@ public int getAbsDate() {
401
401
*/
402
402
private static int gregorianDateToAbsDate (int year , int month , int dayOfMonth ) {
403
403
int absDate = dayOfMonth ;
404
- for (int m = month - 1 ; m > 0 ; m -- ) {
404
+ for (int m = Calendar . JANUARY ; m < month ; m ++ ) {
405
405
absDate += getLastDayOfGregorianMonth (m , year ); // days in prior months of the year
406
406
}
407
+ int yearPrevious = year - 1 ;
407
408
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
412
413
}
413
414
414
415
/**
@@ -460,8 +461,8 @@ private static int getLastMonthOfJewishYear(int year) {
460
461
*/
461
462
public static int getJewishCalendarElapsedDays (int year ) {
462
463
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 );
465
466
// delay Rosh Hashana for the 4 dechiyos
466
467
return addDechiyos (year , moladDay , moladParts );
467
468
}
@@ -670,7 +671,7 @@ private static void validateGregorianDate(int year, int month, int dayOfMonth) {
670
671
* {@link GregorianCalendar}, where {@link Calendar#JANUARY} has a value of 0.
671
672
*/
672
673
private static void validateGregorianMonth (int month ) {
673
- if (month > 11 || month < 0 ) {
674
+ if (month > Calendar . DECEMBER || month < Calendar . JANUARY ) {
674
675
throw new IllegalArgumentException ("The Gregorian month has to be between 0 - 11. " + month
675
676
+ " is invalid." );
676
677
}
@@ -908,8 +909,8 @@ private static int moladToAbsDate(long chalakim) {
908
909
public JewishDate (long molad ) {
909
910
absDateToDate (moladToAbsDate (molad ));
910
911
// 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 );
913
914
setMoladTime (conjunctionParts );
914
915
}
915
916
@@ -1042,13 +1043,10 @@ public void setDate(Calendar calendar) {
1042
1043
throw new IllegalArgumentException ("Calendars with a BC era are not supported. The year "
1043
1044
+ calendar .get (Calendar .YEAR ) + " BC is invalid." );
1044
1045
}
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 );
1052
1050
}
1053
1051
1054
1052
/**
@@ -1095,7 +1093,7 @@ public void setDate(LocalDate localDate) {
1095
1093
*/
1096
1094
public void setGregorianDate (int year , int month , int dayOfMonth ) {
1097
1095
validateGregorianDate (year , month , dayOfMonth );
1098
- setInternalGregorianDate (year , month + 1 , dayOfMonth );
1096
+ setInternalGregorianDate (year , month , dayOfMonth );
1099
1097
}
1100
1098
1101
1099
/**
@@ -1110,15 +1108,16 @@ public void setGregorianDate(int year, int month, int dayOfMonth) {
1110
1108
*/
1111
1109
private void setInternalGregorianDate (int year , int month , int dayOfMonth ) {
1112
1110
// 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 ;
1115
1114
}
1116
1115
// init month, date, year
1117
1116
gregorianMonth = month ;
1118
1117
gregorianDayOfMonth = dayOfMonth ;
1119
1118
gregorianYear = year ;
1120
1119
1121
- gregorianAbsDate = gregorianDateToAbsDate (gregorianYear , gregorianMonth , gregorianDayOfMonth ); // init date
1120
+ gregorianAbsDate = gregorianDateToAbsDate (year , month , dayOfMonth ); // init date
1122
1121
absDateToJewishDate ();
1123
1122
1124
1123
dayOfWeek = Math .abs (gregorianAbsDate % 7 ) + 1 ; // set day of week
@@ -1267,9 +1266,9 @@ public void forward(int field, int amount) {
1267
1266
if (gregorianDayOfMonth == getLastDayOfGregorianMonth (gregorianMonth , gregorianYear )) {
1268
1267
gregorianDayOfMonth = 1 ;
1269
1268
// if last day of year
1270
- if (gregorianMonth == 12 ) {
1269
+ if (gregorianMonth == Calendar . DECEMBER ) {
1271
1270
gregorianYear ++;
1272
- gregorianMonth = 1 ;
1271
+ gregorianMonth = Calendar . JANUARY ;
1273
1272
} else {
1274
1273
gregorianMonth ++;
1275
1274
}
@@ -1357,8 +1356,8 @@ private void forwardJewishMonth(int amount) {
1357
1356
public void back () {
1358
1357
// Change Gregorian date
1359
1358
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 ;
1362
1361
gregorianYear --;
1363
1362
} else {
1364
1363
gregorianMonth --;
@@ -1421,7 +1420,7 @@ public int compareTo(JewishDate jewishDate) {
1421
1420
* @return the Gregorian month (between 0-11). Like the java.util.Calendar, months are 0 based.
1422
1421
*/
1423
1422
public int getGregorianMonth () {
1424
- return gregorianMonth - 1 ;
1423
+ return gregorianMonth ;
1425
1424
}
1426
1425
1427
1426
/**
@@ -1491,7 +1490,7 @@ public int getDayOfWeek() {
1491
1490
*/
1492
1491
public void setGregorianMonth (int month ) {
1493
1492
validateGregorianMonth (month );
1494
- setInternalGregorianDate (gregorianYear , month + 1 , gregorianDayOfMonth );
1493
+ setInternalGregorianDate (gregorianYear , month , gregorianDayOfMonth );
1495
1494
}
1496
1495
1497
1496
/**
0 commit comments