diff --git a/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishCalendar.java b/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishCalendar.java index 7b162027..1d50c08f 100644 --- a/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishCalendar.java +++ b/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishCalendar.java @@ -1395,13 +1395,15 @@ public int getTekufasTishreiElapsedDays() { double solar = (getJewishYear() - 1) * 365.25; return (int) Math.floor(days - solar); } - + /** * Calculates the hours for when the Tekufa (season) changes. * There are 4 tekufos a year: Nissan/Spring, Tammuz/Summer, Tishri/Fall, and Teves/Winter. This calculation is * according to Shmuel in Eruvin 56a, which is a more rounded up version of Rav Adda's calculation. The Rav Adda's calculation. This calculation follows the Levush in the end of Siman 428, + * who writes that the hours to calculate the tekufa are based on regular clock hours and not proportional hours, and that the time + * for the tekufa are based on 6 hours after the previous day's Midday. The Rama writes in Yoreh De'ah 116:5 that one should not drink water during * the tekufa change. Rabbi Ovadia Yosef (Halichot Olam, @@ -1426,18 +1428,20 @@ private Double getTekufa() { return null; } } - + /** * Returns an {@code Instant} if the current day has a Tekufa * (season) change. The {@code Instant} will contain the time that the tekufa (season) is arriving. If this method is * called on a day without a tekufa change, it will return a {@code null}. The default implementation of this method * will return the tekufa change according to the calculations of the Luach Itim * Lebinah following Rabbi Yechiel Michel Tucazinsky. - * However, there is also the opinion of Rabbi Yonah Boron, who calculates the tekufa based on Local Mean Time (LMT) - * in Israel which causes a 21-minute difference. There is a third opinion as well to use seasonal midday but that is not a - * generally followed opinion, so it has not been implemented. + * However, there is also the opinion of Rabbi Yonah Martzbach, who calculates the tekufa based on Local Mean Time (LMT) + * in Israel which causes a 21-minute difference. + * It should be noted that this method only covers two opinions of how to calculate the tekufa (based on 6 hours after Midday of the day before the tekufa). + * The Rosh (Tosafos HaRosh Berachos 3:2) is of the opinion that the calculation starts at sunset and to use proportional hours. + * While the Tashbetz (Shut Tashbetz Chelek 1, Siman 109) is also of the opinion that the calculation starts at sunset, however, he writes to use regular hours. * @param useLocalMeanTime if true, removes ~21 minutes from the time of the tekufa calculated by Rabbi Yechiel Michel - * Tucazinsky, and will follow the opinion of Rabbi Yonah Boron. + * Tucazinsky, and will follow the opinion of Rabbi Yonah Martzbach. * @return an Instant with the time that the tekufa (season) changes or a null on a day with no tekufa change. * @see #getTekufa() */ @@ -1451,11 +1455,18 @@ public Instant getTekufaAsInstant(boolean useLocalMeanTime) { // formatter class used to display the Instant. ZoneId yerushalayimStandardTZ = ZoneId.of("GMT+2"); - hours = hours - 6; // minus 6 hours because the hebrew date starts at sunset which is at 6PM + hours -= 6; // minus 6 hours because the hebrew date starts at sunset which is at 6PM + + LocalDate tekufaDate = getLocalDate(); + if (hours < 0) { + hours += 24; + tekufaDate = tekufaDate.minusDays(1); + } + int minutes = (int) ((hours - hours.intValue()) * 60); LocalTime time = LocalTime.of(hours.intValue(), minutes); - ZonedDateTime tekufaZDT = ZonedDateTime.of(getLocalDate(), time, yerushalayimStandardTZ); + ZonedDateTime tekufaZDT = ZonedDateTime.of(tekufaDate, time, yerushalayimStandardTZ); // Har Habayis at a longitude of 35.2354 offset vs longitude 35 in standard time, so we subtract the time difference // of 20.94 minutes (20 minutes and 56 seconds and 496 millis) to get to Standard time from local mean time