@@ -664,6 +664,50 @@ public long getShaahZmanis96MinutesZmanis() {
664
664
public long getShaahZmanisAteretTorah () {
665
665
return getTemporalHour (getAlos72Zmanis (), getTzaisAteretTorah ());
666
666
}
667
+
668
+ /**
669
+ * Method to return a <em>shaah zmanis</em> (temporal hour) used by some <em>zmanim</em> according to the opinion of
670
+ * <a href="https://en.wikipedia.org/wiki/Yaakov_Moshe_Hillel">Rabbi Yaakov Moshe Hillel</a> as published in the
671
+ * <em>luach</em> of the Bais Horaah of Yeshivat Chevrat Ahavat Shalom that is based on a day starting 72 minutes before
672
+ * sunrise in degrees {@link #getAlos16Point1Degrees() <em>alos</em> 16.1°} and ending 14 minutes after sunset in
673
+ * degrees {@link #getTzaisGeonim3Point8Degrees() <em>tzais</em> 3.8°}. This day is split into 12 equal parts with
674
+ * each part being a <em>shaah zmanis</em>. Note that with this system, <em>chatzos</em> (mid-day) will not be the point
675
+ * that the sun is {@link #getSunTransit() halfway across the sky}. These <em>shaos zmaniyos</em> are used for <em>Mincha
676
+ * Ketana</em> and <em>Plag Hamincha</em>. The 14 minutes are based on 3/4 of an 18 minute <em>mil</em>, with half a minute
677
+ * added for Rav Yosi.
678
+ *
679
+ * @return the <code>long</code> millisecond length of a <em>shaah zmanis</em>. If the calculation can't be computed
680
+ * such as in the Arctic Circle where there is at least one day a year where the sun does not rise, and one
681
+ * where it does not set, a {@link Long#MIN_VALUE} will be returned. See detailed explanation on top of the
682
+ * {@link AstronomicalCalendar} documentation.
683
+ *
684
+ * @see #getMinchaKetanaAhavatShalom()
685
+ * @see #getPlagAhavatShalom()
686
+ */
687
+ public long getShaahZmanisAlos16Point1ToTzais3Point8 () {
688
+ return getTemporalHour (getAlos16Point1Degrees (), getTzaisGeonim3Point8Degrees ());
689
+ }
690
+
691
+ /**
692
+ * Method to return a <em>shaah zmanis</em> (temporal hour) used by some <em>zmanim</em> according to the opinion of
693
+ * <a href="https://en.wikipedia.org/wiki/Yaakov_Moshe_Hillel">Rabbi Yaakov Moshe Hillel</a> as published in the
694
+ * <em>luach</em> of the Bais Horaah of Yeshivat Chevrat Ahavat Shalom that is based on a day starting 72 minutes before
695
+ * sunrise in degrees {@link #getAlos16Point1Degrees() <em>alos</em> 16.1°} and ending 13.5 minutes after sunset in
696
+ * degrees {@link #getTzaisGeonim3Point7Degrees() <em>tzais</em> 3.7°}. This day is split into 12 equal parts with
697
+ * each part being a <em>shaah zmanis</em>. Note that with this system, <em>chatzos</em> (mid-day) will not be the point
698
+ * that the sun is {@link #getSunTransit() halfway across the sky}. These <em>shaos zmaniyos</em> are used for <em>Mincha
699
+ * Gedola</em> calculation.
700
+ *
701
+ * @return the <code>long</code> millisecond length of a <em>shaah zmanis</em>. If the calculation can't be computed
702
+ * such as in the Arctic Circle where there is at least one day a year where the sun does not rise, and one
703
+ * where it does not set, a {@link Long#MIN_VALUE} will be returned. See detailed explanation on top of the
704
+ * {@link AstronomicalCalendar} documentation.
705
+ *
706
+ * @see #getMinchaGedolaAhavatShalom()
707
+ */
708
+ public long getShaahZmanisAlos16Point1ToTzais3Point7 () {
709
+ return getTemporalHour (getAlos16Point1Degrees (), getTzaisGeonim3Point7Degrees ());
710
+ }
667
711
668
712
/**
669
713
* Method to return a <em>shaah zmanis</em> (temporal hour) calculated using a dip of 96 minutes. This calculation
@@ -1766,6 +1810,37 @@ public Date getMinchaGedola72Minutes() {
1766
1810
public Date getMinchaGedola16Point1Degrees () {
1767
1811
return getMinchaGedola (getAlos16Point1Degrees (), getTzais16Point1Degrees ());
1768
1812
}
1813
+
1814
+ /**
1815
+ * This method returns the time of <em>mincha gedola</em> based on the opinion of <a href=
1816
+ * "https://en.wikipedia.org/wiki/Yaakov_Moshe_Hillel">Rabbi Yaakov Moshe Hillel</a> as published in the <em>luach</em>
1817
+ * of the Bais Horaah of Yeshivat Chevrat Ahavat Shalom that <em>mincha gedola</em> is calculated as half a <em>shaah
1818
+ * zmanis</em> after <em>chatzos</em> with <em>shaos zmaniyos</em> calculated based on a day starting 72 minutes befoe sunrise
1819
+ * {@link #getAlos16Point1Degrees() <em>alos</em> 16.1°} and ending 13.5 minutes after sunset {@link
1820
+ * #getTzaisGeonim3Point7Degrees() <em>tzais</em> 3.7°}. <em>Mincha gedola</em> is the earliest time to pray <em>mincha</em>.
1821
+ * The later of this time or 30 clock minutes after <em>chatzos</em> is returned. See {@link #getMinchaGedolaGreaterThan30()}
1822
+ * (though that calculation is based on <em>mincha gedola</em> GRA).
1823
+ * For more information about <em>mincha gedola</em> see the documentation on {@link #getMinchaGedola() <em>mincha gedola</em>}.
1824
+ *
1825
+ * @return the <code>Date</code> of the <em>mincha gedola</em>. If the calculation can't be computed such as northern and
1826
+ * southern locations even south of the Arctic Circle and north of the Antarctic Circle where the sun may not
1827
+ * reach low enough below the horizon for this calculation, a null will be returned. See detailed explanation
1828
+ * on top of the {@link AstronomicalCalendar} documentation.
1829
+ *
1830
+ * @see #getAlos16Point1Degrees()
1831
+ * @see #getTzaisGeonim3Point7Degrees()
1832
+ * @see #getShaahZmanisAlos16Point1ToTzais3Point7()
1833
+ * @see #getMinchaGedolaGreaterThan30()
1834
+ */
1835
+ public Date getMinchaGedolaAhavatShalom () {
1836
+
1837
+ if (getMinchaGedola30Minutes () == null || getMinchaGedola () == null ) {
1838
+ return null ;
1839
+ } else {
1840
+ return getMinchaGedola30Minutes ().compareTo (getTimeOffset (getChatzos (), getShaahZmanisAlos16Point1ToTzais3Point7 () / 2 )) > 0 ?
1841
+ getMinchaGedola30Minutes () : getTimeOffset (getChatzos (), getShaahZmanisAlos16Point1ToTzais3Point7 () / 2 );
1842
+ }
1843
+ }
1769
1844
1770
1845
/**
1771
1846
* This is a convenience method that returns the later of {@link #getMinchaGedola()} and
@@ -1806,6 +1881,29 @@ public Date getMinchaGedolaGreaterThan30() {
1806
1881
public Date getMinchaKetana16Point1Degrees () {
1807
1882
return getMinchaKetana (getAlos16Point1Degrees (), getTzais16Point1Degrees ());
1808
1883
}
1884
+
1885
+ /**
1886
+ * This method returns the time of <em>mincha ketana</em> based on the opinion of <a href=
1887
+ * "https://en.wikipedia.org/wiki/Yaakov_Moshe_Hillel">Rabbi Yaakov Moshe Hillel</a> as published in the <em>luach</em>
1888
+ * of the Bais Horaah of Yeshivat Chevrat Ahavat Shalom that <em>mincha ketana</em> is calculated as 2.5 <em>shaos
1889
+ * zmaniyos</em> before {@link #getTzaisGeonim3Point8Degrees() <em>tzais</em> 3.8°} with <em>shaos zmaniyos</em>
1890
+ * calculated based on a day starting at {@link #getAlos16Point1Degrees() <em>alos</em> 16.1°} and ending at
1891
+ * <em>tzais</em> 3.8°. <em>Mincha ketana</em> is the preferred earliest time to pray <em>mincha</em> according to
1892
+ * the opinion of the <a href="https://en.wikipedia.org/wiki/Maimonides">Rambam</a> and others. For more information
1893
+ * on this see the documentation on {@link #getMinchaKetana() <em>mincha ketana</em>}.
1894
+ *
1895
+ * @return the the <code>Date</code> of the time of <em>mincha ketana</em>. If the calculation can't be computed such as northern
1896
+ * and southern locations even south of the Arctic Circle and north of the Antarctic Circle where the sun may not
1897
+ * reach low enough below the horizon for this calculation, a null will be returned. See detailed explanation
1898
+ * on top of the {@link AstronomicalCalendar} documentation.
1899
+ *
1900
+ * @see #getShaahZmanisAlos16Point1ToTzais3Point8()
1901
+ * @see #getMinchaGedolaAhavatShalom()
1902
+ * @see #getPlagAhavatShalom()
1903
+ */
1904
+ public Date getMinchaKetanaAhavatShalom () {
1905
+ return getTimeOffset (getTzaisGeonim3Point8Degrees (), -getShaahZmanisAlos16Point1ToTzais3Point8 () * 2.5 );
1906
+ }
1809
1907
1810
1908
/**
1811
1909
* This method returns the time of <em>mincha ketana</em> according to the Magen Avraham with the day
@@ -2118,6 +2216,27 @@ public Date getPlagAlosToSunset() {
2118
2216
public Date getPlagAlos16Point1ToTzaisGeonim7Point083Degrees () {
2119
2217
return getPlagHamincha (getAlos16Point1Degrees (), getTzaisGeonim7Point083Degrees ());
2120
2218
}
2219
+
2220
+ /**
2221
+ * This method returns the time of <em>plag hamincha</em> (the earliest time that Shabbos can be started) based on the
2222
+ * opinion of <a href="https://en.wikipedia.org/wiki/Yaakov_Moshe_Hillel">Rabbi Yaakov Moshe Hillel</a> as published in
2223
+ * the <em>luach</em> of the Bais Horaah of Yeshivat Chevrat Ahavat Shalom that that <em>plag hamincha</em> is calculated
2224
+ * as 1.25 <em>shaos zmaniyos</em> before {@link #getTzaisGeonim3Point8Degrees() <em>tzais</em> 3.8°} with <em>shaos
2225
+ * zmaniyos</em> calculated based on a day starting at {@link #getAlos16Point1Degrees() <em>alos</em> 16.1°} and
2226
+ * ending at <em>tzais</em> 3.8°.
2227
+ *
2228
+ * @return the <code>Date</code> of the <em>plag</em>. If the calculation can't be computed such as northern and
2229
+ * southern locations even south of the Arctic Circle and north of the Antarctic Circle where the sun may not
2230
+ * reach low enough below the horizon for this calculation, a null will be returned. See detailed explanation
2231
+ * on top of the {@link AstronomicalCalendar} documentation.
2232
+ *
2233
+ * @see #getShaahZmanisAlos16Point1ToTzais3Point8()
2234
+ * @see #getMinchaGedolaAhavatShalom()
2235
+ * @see #getMinchaKetanaAhavatShalom()
2236
+ */
2237
+ public Date getPlagAhavatShalom () {
2238
+ return getTimeOffset (getTzaisGeonim3Point8Degrees (), -getShaahZmanisAlos16Point1ToTzais3Point8 () * 1.25 );
2239
+ }
2121
2240
2122
2241
/**
2123
2242
* Method to return the beginning of <em>bain hashmashos</em> of Rabbeinu Tam calculated when the sun is
@@ -2848,7 +2967,7 @@ private Date getZmanisBasedOffset(double hours) {
2848
2967
return null ;
2849
2968
}
2850
2969
2851
- if (hours > 0 ) {
2970
+ if (hours > 0 ) {
2852
2971
return getTimeOffset (getElevationAdjustedSunset (), (long ) (shaahZmanis * hours ));
2853
2972
} else {
2854
2973
return getTimeOffset (getElevationAdjustedSunrise (), (long ) (shaahZmanis * hours ));
@@ -3153,7 +3272,7 @@ public Date getSofZmanKidushLevanaBetweenMoldos(Date alos, Date tzais) {
3153
3272
// Polynesia on Dec 2027 when kiddush Levana 3 days can be said on <em>Rosh Chodesh</em>, the sof zman Kiddush Levana
3154
3273
// will be on the 12th of the Teves. In the case of Anadyr, Russia on Jan, 2071, sof zman Kiddush Levana between the
3155
3274
// moldos will occur is on the night of 17th of Shevat. See Rabbi Dovid Heber's Shaarei Zmanim chapter 4 (pages 28 and 32).
3156
- if (jewishCalendar .getJewishDayOfMonth () < 11 || jewishCalendar .getJewishDayOfMonth () > 16 ) {
3275
+ if (jewishCalendar .getJewishDayOfMonth () < 11 || jewishCalendar .getJewishDayOfMonth () > 16 ) {
3157
3276
return null ;
3158
3277
}
3159
3278
return getMoladBasedTime (jewishCalendar .getSofZmanKidushLevanaBetweenMoldos (), alos , tzais , false );
@@ -3181,9 +3300,9 @@ public Date getSofZmanKidushLevanaBetweenMoldos(Date alos, Date tzais) {
3181
3300
private Date getMoladBasedTime (Date moladBasedTime , Date alos , Date tzais , boolean techila ) {
3182
3301
Date lastMidnight = getMidnightLastNight ();
3183
3302
Date midnightTonigh = getMidnightTonight ();
3184
- if (!(moladBasedTime .before (lastMidnight ) || moladBasedTime .after (midnightTonigh ))){
3185
- if (alos != null || tzais != null ) {
3186
- if (techila && !(moladBasedTime .before (tzais ) || moladBasedTime .after (alos ))){
3303
+ if (!(moladBasedTime .before (lastMidnight ) || moladBasedTime .after (midnightTonigh ))){
3304
+ if (alos != null || tzais != null ) {
3305
+ if (techila && !(moladBasedTime .before (tzais ) || moladBasedTime .after (alos ))){
3187
3306
return tzais ;
3188
3307
} else {
3189
3308
return alos ;
@@ -3247,7 +3366,7 @@ public Date getSofZmanKidushLevana15Days(Date alos, Date tzais) {
3247
3366
// French Polynesia on Dec 2027 when kiddush Levana 3 days can be said on <em>Rosh Chodesh</em>, the sof zman Kiddush
3248
3367
// Levana will be on the 12th of the Teves. in the case of Anadyr, Russia on Jan, 2071, sof zman kiddush levana will
3249
3368
// occur after midnight on the 17th of Shevat. See Rabbi Dovid Heber's Shaarei Zmanim chapter 4 (pages 28 and 32).
3250
- if (jewishCalendar .getJewishDayOfMonth () < 11 || jewishCalendar .getJewishDayOfMonth () > 17 ) {
3369
+ if (jewishCalendar .getJewishDayOfMonth () < 11 || jewishCalendar .getJewishDayOfMonth () > 17 ) {
3251
3370
return null ;
3252
3371
}
3253
3372
return getMoladBasedTime (jewishCalendar .getSofZmanKidushLevana15Days (), alos , tzais , false );
@@ -3323,15 +3442,15 @@ public Date getTchilasZmanKidushLevana3Days(Date alos, Date tzais) {
3323
3442
// of the 30th, the second night of Rosh Chodesh. The 3rd day after the <em>molad</em> will be on the 4th of the month.
3324
3443
// In the case of Anadyr, Russia on Jan, 2071, when sof zman kiddush levana is on the 17th of the month, the 3rd day
3325
3444
// from the molad will be on the 5th day of Shevat. See Rabbi Dovid Heber's Shaarei Zmanim chapter 4 (pages 28 and 32).
3326
- if (jewishCalendar .getJewishDayOfMonth () > 5 && jewishCalendar .getJewishDayOfMonth () < 30 ) {
3445
+ if (jewishCalendar .getJewishDayOfMonth () > 5 && jewishCalendar .getJewishDayOfMonth () < 30 ) {
3327
3446
return null ;
3328
3447
}
3329
3448
3330
3449
Date zman = getMoladBasedTime (jewishCalendar .getTchilasZmanKidushLevana3Days (), alos , tzais , true );
3331
3450
3332
3451
//Get the following month's zman kiddush Levana for the extreme case of Rapa Iti in French Polynesia on Dec 2027 when
3333
3452
// kiddush Levana can be said on Rosh Chodesh (the evening of the 30th). See Rabbi Dovid Heber's Shaarei Zmanim chapter 4 (page 32)
3334
- if (zman == null && jewishCalendar .getJewishDayOfMonth () == 30 ) {
3453
+ if (zman == null && jewishCalendar .getJewishDayOfMonth () == 30 ) {
3335
3454
jewishCalendar .forward (Calendar .MONTH , 1 );
3336
3455
zman = getMoladBasedTime (jewishCalendar .getTchilasZmanKidushLevana3Days (), null , null , true );
3337
3456
}
@@ -3358,13 +3477,13 @@ public Date getZmanMolad() {
3358
3477
// Optimize to not calculate for impossible dates, but account for extreme cases. The molad in the extreme case of Rapa
3359
3478
// Iti in French Polynesia on Dec 2027 occurs on the night of the 27th of Kislev. In the case of Anadyr, Russia on
3360
3479
// Jan 2071, the molad will be on the 2nd day of Shevat. See Rabbi Dovid Heber's Shaarei Zmanim chapter 4 (pages 28 and 32).
3361
- if (jewishCalendar .getJewishDayOfMonth () > 2 && jewishCalendar .getJewishDayOfMonth () < 27 ) {
3480
+ if (jewishCalendar .getJewishDayOfMonth () > 2 && jewishCalendar .getJewishDayOfMonth () < 27 ) {
3362
3481
return null ;
3363
3482
}
3364
3483
Date molad = getMoladBasedTime (jewishCalendar .getMoladAsDate (), null , null , true );
3365
3484
3366
3485
// deal with molad that happens on the end of the previous month
3367
- if (molad == null && jewishCalendar .getJewishDayOfMonth () > 26 ) {
3486
+ if (molad == null && jewishCalendar .getJewishDayOfMonth () > 26 ) {
3368
3487
jewishCalendar .forward (Calendar .MONTH , 1 );
3369
3488
molad = getMoladBasedTime (jewishCalendar .getMoladAsDate (), null , null , true );
3370
3489
}
@@ -3432,7 +3551,7 @@ public Date getTchilasZmanKidushLevana7Days(Date alos, Date tzais) {
3432
3551
// of the 30th, the second night of Rosh Chodesh), the 7th day after the molad will be on the 4th of the month.
3433
3552
// In the case of Anadyr, Russia on Jan, 2071, when sof zman kiddush levana is on the 17th of the month, the 7th day
3434
3553
// from the molad will be on the 9th day of Shevat. See Rabbi Dovid Heber's Shaarei Zmanim chapter 4 (pages 28 and 32).
3435
- if (jewishCalendar .getJewishDayOfMonth () < 4 || jewishCalendar .getJewishDayOfMonth () > 9 ) {
3554
+ if (jewishCalendar .getJewishDayOfMonth () < 4 || jewishCalendar .getJewishDayOfMonth () > 9 ) {
3436
3555
return null ;
3437
3556
}
3438
3557
0 commit comments