Skip to content

Commit 00c4884

Browse files
authored
Add Rav Moshe Feinsten's zmanim
This adds Rav Moshe Feinsten's fixed local chatzos based zmanim as used in MTJ, Yeshiva of Staten Island and Camp Staten Island
1 parent 6c90f7c commit 00c4884

File tree

1 file changed

+228
-1
lines changed

1 file changed

+228
-1
lines changed

src/main/java/com/kosherjava/zmanim/ComplexZmanimCalendar.java

Lines changed: 228 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2891,7 +2891,7 @@ public Date getSofZmanKidushLevanaBetweenMoldos(Date alos, Date tzais) {
28912891
}
28922892

28932893
/**
2894-
* Returns the Date of the <em>molad</em> based time if it occurs on the current date. Since <em>Kiddush Levana</em>
2894+
* Returns the Date of the <em>molad</em> based time if it occurs on the current date.Since <em>Kiddush Levana</em>
28952895
* can only be said during the day, there are parameters to limit it to between <em>alos</em> and <em>tzais</em>. If
28962896
* the time occurs between <em>alos</em> and <em>tzais</em>, <em>tzais</em> will be returned
28972897
*
@@ -3607,4 +3607,231 @@ public Date getPlagHaminchaBaalHatanya() {
36073607
public Date getTzaisBaalHatanya() {
36083608
return this.getSunsetOffsetByDegrees(ZENITH_6_DEGREES);
36093609
}
3610+
3611+
/**
3612+
* Calculate zmanim based on <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten</a> as
3613+
* calculated in <a href="https://en.wikipedia.org/wiki/Mesivtha_Tifereth_Jerusalem">MTJ</a>, <a href=
3614+
* "https://en.wikipedia.org/wiki/Mesivtha_Tifereth_Jerusalem">Yeshiva of Staten Island</a>, and Camp Yeshiva
3615+
* of Staten Island. The day is split in two, from <em>alos</em> / sunrise to fixed local chatzos, and and second
3616+
* half of the day, from fixed local chatzos to sunset / <em>tzais</em>. Morning based times are calculated based
3617+
* on the first 6 hours, and afternoon times based on the second half of the day.
3618+
*
3619+
* @param startOfHalfDay
3620+
* The start of the half day. This would be <em>alos</em> or sunrise for morning based times and fixed
3621+
* local <em>chatzos</em> for the second half of the day.
3622+
* @param endOfHalfDay
3623+
* The end of the half day. This would be fixed local <em>chatzos</em> for morning based times and sunset
3624+
* or <em>tzais</em> for afternoon based times.
3625+
* @param hours
3626+
* the number of hours to offset the beginning of the first or second half of the day
3627+
*
3628+
* @return the <code>Date</code> of the later of {@link #getMinchaGedolaBaalHatanya()} and {@link #getMinchaGedola30Minutes()}.
3629+
* If the calculation can't be computed such as in the Arctic Circle where there is at least one day a year
3630+
* where the sun does not rise, and one where it does not set, a null will be returned. See detailed
3631+
* explanation on top of the {@link AstronomicalCalendar} documentation.
3632+
*
3633+
* @see ComplexZmanimCalendar#getFixedLocalChatzos()
3634+
*/
3635+
public Date getFixedLocalChatzosBasedZmanim(Date startOfHalfDay, Date endOfHalfDay, double hours) {
3636+
if (startOfHalfDay == null || endOfHalfDay == null) {
3637+
return null;
3638+
}
3639+
long shaahZmanis = (endOfHalfDay.getTime() - startOfHalfDay.getTime()) / 6;
3640+
return new Date((long)(startOfHalfDay.getTime() + shaahZmanis * hours));
3641+
}
3642+
3643+
/**
3644+
* This method returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten</a> opinion of the
3645+
* claculation of <em>sof zman krias shema</em> (latest time to recite <em>Shema</em> in the morning) according to the
3646+
* opinion of the <em><a href="https://en.wikipedia.org/wiki/Avraham_Gombinern">Magen Avraham (MGA)</a></em> that the
3647+
* day is calculated from dawn to nightfall, but calculated using the first half of the day only. The half a day starts
3648+
* at <em>alos</em> defined as {@link #getAlos18Degrees() 18&deg;} and ends at {@link #getFixedLocalChatzos() fixed local
3649+
* chatzos}. <em>Sof Zman Shema</em> is 3 <em>shaos zmaniyos</em> (solar hours) after <em>alos</em> or half of this half-day.
3650+
*
3651+
* @return the <code>Date</code> of the latest <em>zman krias shema</em>. If the calculation can't be computed such
3652+
* as northern and southern locations even south of the Arctic Circle and north of the Antarctic Circle
3653+
* where the sun may not reach low enough below the horizon for this calculation, a null will be returned.
3654+
* See detailed explanation on top of the {@link AstronomicalCalendar} documentation.
3655+
* @see #getAlos18Degrees()
3656+
* @see #getFixedLocalChatzos()
3657+
* @see #getFixedLocalChatzosBasedZmanim(Date, Date, double)
3658+
*/
3659+
public Date getSofZmanShmaMGA18DegreesToFixedLocalChatzos() {
3660+
return getFixedLocalChatzosBasedZmanim(getAlos18Degrees(), getFixedLocalChatzos(), 3);
3661+
}
3662+
3663+
/**
3664+
* This method returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten</a> opinion of the
3665+
* claculation of <em>sof zman krias shema</em> (latest time to recite <em>Shema</em> in the morning) according to the
3666+
* opinion of the <em><a href="https://en.wikipedia.org/wiki/Avraham_Gombinern">Magen Avraham (MGA)</a></em> that the
3667+
* day is calculated from dawn to nightfall, but calculated using the first half of the day only. The half a day starts
3668+
* at <em>alos</em> defined as {@link #getAlos16Point1Degrees() 16.1&deg;} and ends at {@link #getFixedLocalChatzos() fixed local
3669+
* chatzos}. <em>Sof Zman Shema</em> is 3 <em>shaos zmaniyos</em> (solar hours) after this <em>alos</em> or half of this half-day.
3670+
*
3671+
* @return the <code>Date</code> of the latest <em>zman krias shema</em>. If the calculation can't be computed such
3672+
* as northern and southern locations even south of the Arctic Circle and north of the Antarctic Circle
3673+
* where the sun may not reach low enough below the horizon for this calculation, a null will be returned.
3674+
* See detailed explanation on top of the {@link AstronomicalCalendar} documentation.
3675+
* @see #getAlos16Point1Degrees()
3676+
* @see #getFixedLocalChatzos()
3677+
* @see #getFixedLocalChatzosBasedZmanim(Date, Date, double)
3678+
*/
3679+
public Date getSofZmanShmaMGA16Point1DegreesToFixedLocalChatzos() {
3680+
return getFixedLocalChatzosBasedZmanim(getAlos16Point1Degrees(), getFixedLocalChatzos(), 3);
3681+
}
3682+
3683+
/**
3684+
* This method returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten</a> opinion of the
3685+
* claculation of <em>sof zman krias shema</em> (latest time to recite <em>Shema</em> in the morning) according to the
3686+
* opinion of the <em><a href="https://en.wikipedia.org/wiki/Avraham_Gombinern">Magen Avraham (MGA)</a></em> that the
3687+
* day is calculated from dawn to nightfall, but calculated using the first half of the day only. The half a day starts
3688+
* at <em>alos</em> defined as {@link #getAlos90() 90 minutes before sunrise} and ends at {@link #getFixedLocalChatzos()
3689+
* fixed local chatzos}. <em>Sof Zman Shema</em> is 3 <em>shaos zmaniyos</em> (solar hours) after this <em>alos</em> or
3690+
* half of this half-day.
3691+
*
3692+
* @return the <code>Date</code> of the latest <em>zman krias shema</em>. If the calculation can't be computed such
3693+
* as northern and southern locations even south of the Arctic Circle and north of the Antarctic Circle
3694+
* where the sun may not reach low enough below the horizon for this calculation, a null will be returned.
3695+
* See detailed explanation on top of the {@link AstronomicalCalendar} documentation.
3696+
* @see #getAlos90()
3697+
* @see #getFixedLocalChatzos()
3698+
* @see #getFixedLocalChatzosBasedZmanim(Date, Date, double)
3699+
*/
3700+
public Date getSofZmanShmaMGA90MinutesToFixedLocalChatzos() {
3701+
return getFixedLocalChatzosBasedZmanim(getAlos90(), getFixedLocalChatzos(), 3);
3702+
}
3703+
3704+
/**
3705+
* This method returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten</a> opinion of the
3706+
* claculation of <em>sof zman krias shema</em> (latest time to recite <em>Shema</em> in the morning) according to the
3707+
* opinion of the <em><a href="https://en.wikipedia.org/wiki/Avraham_Gombinern">Magen Avraham (MGA)</a></em> that the
3708+
* day is calculated from dawn to nightfall, but calculated using the first half of the day only. The half a day starts
3709+
* at <em>alos</em> defined as {@link #getAlos72() 72 minutes before sunrise} and ends at {@link #getFixedLocalChatzos()
3710+
* fixed local chatzos}. <em>Sof Zman Shema</em> is 3 <em>shaos zmaniyos</em> (solar hours) after this <em>alos</em> or
3711+
* half of this half-day.
3712+
*
3713+
* @return the <code>Date</code> of the latest <em>zman krias shema</em>. If the calculation can't be computed such
3714+
* as northern and southern locations even south of the Arctic Circle and north of the Antarctic Circle
3715+
* where the sun may not reach low enough below the horizon for this calculation, a null will be returned.
3716+
* See detailed explanation on top of the {@link AstronomicalCalendar} documentation.
3717+
* @see #getAlos72()
3718+
* @see #getFixedLocalChatzos()
3719+
* @see #getFixedLocalChatzosBasedZmanim(Date, Date, double)
3720+
*/
3721+
public Date getSofZmanShmaMGA72MinutesToFixedLocalChatzos() {
3722+
return getFixedLocalChatzosBasedZmanim(getAlos72(), getFixedLocalChatzos(), 3);
3723+
}
3724+
3725+
/**
3726+
* This method returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten</a> opinion of the
3727+
* claculation of <em>sof zman krias shema</em> (latest time to recite <em>Shema</em> in the morning) according to the
3728+
* opinion of the <em><a href="https://en.wikipedia.org/wiki/Vilna_Gaon">GRA</a></em> that the day is calculated from
3729+
* sunrise to sunset, but calculated using the first half of the day only. The half a day starts at {@link #getSunrise()
3730+
* sunrise} and ends at {@link #getFixedLocalChatzos() fixed local chatzos}. <em>Sof Zman Shema</em> is 3 <em>shaos
3731+
* zmaniyos</em> (solar hours) after sunrise or half of this half-day.
3732+
*
3733+
* @return the <code>Date</code> of the latest <em>zman krias shema</em>. If the calculation can't be computed such
3734+
* as northern and southern locations even south of the Arctic Circle and north of the Antarctic Circle
3735+
* where the sun may not reach low enough below the horizon for this calculation, a null will be returned.
3736+
* See detailed explanation on top of the {@link AstronomicalCalendar} documentation.
3737+
* @see #getSunrise()
3738+
* @see #getFixedLocalChatzos()
3739+
* @see #getFixedLocalChatzosBasedZmanim(Date, Date, double)
3740+
*/
3741+
public Date getSofZmanShmaGRASunriseToFixedLocalChatzos() {
3742+
return getFixedLocalChatzosBasedZmanim(getSunrise(), getFixedLocalChatzos(), 3);
3743+
}
3744+
3745+
/**
3746+
* This method returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten's</a> opinion of the
3747+
* claculation of <em>sof zman tfila</em> (<em>zman tfilah</em> (the latest time to recite the morning prayers))
3748+
* according to the opinion of the <em><a href="https://en.wikipedia.org/wiki/Vilna_Gaon">GRA</a></em> that the day is
3749+
* calculated from sunrise to sunset, but calculated using the first half of the day only. The half a day starts at
3750+
* {@link #getSunrise() sunrise} and ends at {@link #getFixedLocalChatzos() fixed local chatzos}. <em>Sof zman tefila</em>
3751+
* is 4 <em>shaos zmaniyos</em> (solar hours) after sunrise or 2/3 of this half-day.
3752+
*
3753+
* @return the <code>Date</code> of the latest <em>zman krias shema</em>. If the calculation can't be computed such
3754+
* as northern and southern locations even south of the Arctic Circle and north of the Antarctic Circle
3755+
* where the sun may not reach low enough below the horizon for this calculation, a null will be returned.
3756+
* See detailed explanation on top of the {@link AstronomicalCalendar} documentation.
3757+
* @see #getSunrise()
3758+
* @see #getFixedLocalChatzos()
3759+
* @see #getFixedLocalChatzosBasedZmanim(Date, Date, double)
3760+
*/
3761+
public Date getSofZmanTfilaGRASunriseToFixedLocalChatzos() {
3762+
return getFixedLocalChatzosBasedZmanim(getSunrise(), getFixedLocalChatzos(), 4);
3763+
}
3764+
3765+
/**
3766+
* This method returns returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten's</a> opinion
3767+
* of the calculation of <em>mincha gedola</em>,the earliest time one can pray <em>mincha</em> <em><a href=
3768+
* "https://en.wikipedia.org/wiki/Vilna_Gaon">GRA</a></em>that is 30 minutes after{@link #getFixedLocalChatzos() fixed
3769+
* local chatzos}.
3770+
*
3771+
* @return the <code>Date</code> of the time of mincha gedola. If the calculation can't be computed such as in the
3772+
* Arctic Circle where there is at least one day a year where the sun does not rise, and one where it does
3773+
* not set, a null will be returned. See detailed explanation on top of the {@link AstronomicalCalendar}
3774+
* documentation.
3775+
*
3776+
* @see #getMinchaGedola()
3777+
* @see #getFixedLocalChatzos()
3778+
* @see #getMinchaKetanaGRAFixedLocalChatzosToSunset
3779+
*/
3780+
public Date getMinchaGedolaGRAFixedLocalChatzos30Minutes() {
3781+
return getTimeOffset(getFixedLocalChatzos(), MINUTE_MILLIS * 30);
3782+
}
3783+
3784+
/**
3785+
* This method returns returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten's</a> opinion
3786+
* of the calculation of <em>mincha ketana</em> (the preferred time to recite the mincha prayers according to the
3787+
* opinion of the <em><a href="https://en.wikipedia.org/wiki/Maimonides">Rambam</a></em> and others) calculated according
3788+
* to the <em><a href="https://en.wikipedia.org/wiki/Vilna_Gaon">GRA</a></em>that is 3.5 <em>shaos zmaniyos</em> (solar
3789+
* hours) after {@link #getFixedLocalChatzos() fixed local chatzos}.
3790+
*
3791+
* @return the <code>Date</code> of the time of mincha gedola. If the calculation can't be computed such as in the
3792+
* Arctic Circle where there is at least one day a year where the sun does not rise, and one where it does
3793+
* not set, a null will be returned. See detailed explanation on top of the {@link AstronomicalCalendar}
3794+
* documentation.
3795+
*
3796+
* @see #getMinchaGedola()
3797+
* @see #getFixedLocalChatzos()
3798+
* @see #getMinchaGedolaGRAFixedLocalChatzos30Minutes
3799+
*/
3800+
public Date getMinchaKetanaGRAFixedLocalChatzosToSunset() {
3801+
return getFixedLocalChatzosBasedZmanim(getFixedLocalChatzos(), getSunset(), 3.5);
3802+
}
3803+
3804+
/**
3805+
* This method returns returns <a href="https://en.wikipedia.org/wiki/Moshe_Feinstein">Rav Moshe Feinsten's</a> opinion
3806+
* of the calculation of This method returns <em>plag hamincha</em> calculated according to the
3807+
* <em><a href="https://en.wikipedia.org/wiki/Vilna_Gaon">GRA</a></em>that is 4.75 <em>shaos zmaniyos</em> (solar
3808+
* hours) after {@link #getFixedLocalChatzos() fixed local chatzos}.
3809+
*
3810+
* @return the <code>Date</code> of the time of mincha gedola. If the calculation can't be computed such as in the
3811+
* Arctic Circle where there is at least one day a year where the sun does not rise, and one where it does
3812+
* not set, a null will be returned. See detailed explanation on top of the {@link AstronomicalCalendar}
3813+
* documentation.
3814+
*
3815+
* @see #getPlagHamincha()
3816+
* @see #getFixedLocalChatzos()
3817+
* @see #getMinchaKetanaGRAFixedLocalChatzosToSunset
3818+
* @see #getMinchaGedolaGRAFixedLocalChatzos30Minutes
3819+
*/
3820+
public Date getPlagHaminchaGRAFixedLocalChatzosToSunset() {
3821+
return getFixedLocalChatzosBasedZmanim(getFixedLocalChatzos(), getSunset(), 4.75);
3822+
}
3823+
3824+
/**
3825+
* Method to return <em>tzais</em> (dusk) calculated as 50 minutes after sea level sunset. This method returns
3826+
* <em>tzais</em> (nightfall) based on the opinion of Rabbi Moshe Feinstein for the New York area. This time should
3827+
* not be used for latitudes different than the NY area.
3828+
*
3829+
* @return the <code>Date</code> representing the time. If the calculation can't be computed such as in the Arctic
3830+
* Circle where there is at least one day a year where the sun does not rise, and one where it does not set,
3831+
* a null will be returned. See detailed explanation on top of the {@link AstronomicalCalendar}
3832+
* documentation.
3833+
*/
3834+
public Date getTzais50() {
3835+
return getTimeOffset(getElevationAdjustedSunset(), 50 * MINUTE_MILLIS);
3836+
}
36103837
}

0 commit comments

Comments
 (0)