From b8be45a7f2f9d006455e32c06980f3c1e4670ff8 Mon Sep 17 00:00:00 2001 From: Moshe Dicker <75931499+dickermoshe@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:14:43 -0400 Subject: [PATCH 1/4] Do not use Timezone when calculating `getLocalMeanTime` --- .../java/com/kosherjava/zmanim/AstronomicalCalendar.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kosherjava/zmanim/AstronomicalCalendar.java b/src/main/java/com/kosherjava/zmanim/AstronomicalCalendar.java index 538e0eb2..c2bbf5f1 100644 --- a/src/main/java/com/kosherjava/zmanim/AstronomicalCalendar.java +++ b/src/main/java/com/kosherjava/zmanim/AstronomicalCalendar.java @@ -721,8 +721,9 @@ public double getSunsetSolarDipFromOffset(double minutes) { * @see GeoLocation#getLocalMeanTimeOffset(Instant) */ public Instant getLocalMeanTime(LocalTime localTime) { - Instant civilTime = ZonedDateTime.of(getAdjustedLocalDate(), localTime, getGeoLocation().getZoneId()).toInstant(); - return getTimeOffset(civilTime, -getGeoLocation().getLocalMeanTimeOffset(civilTime)); + Instant localMeanTime = LocalDateTime.of(getAdjustedLocalDate(), localTime).toInstant(ZoneOffset.UTC); + long longitudeOffsetMillis = (long) (getGeoLocation().getLongitude() * 4 * MINUTE_MILLIS); + return getTimeOffset(localMeanTime, -longitudeOffsetMillis); } /** From badb04e16af2ac185ba62ede48a06cce28667372 Mon Sep 17 00:00:00 2001 From: Moshe Dicker <75931499+dickermoshe@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:16:50 -0400 Subject: [PATCH 2/4] Refine equation of time calculation in NOAACalculator --- .../com/kosherjava/zmanim/util/NOAACalculator.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java b/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java index dfd41802..09b5e788 100644 --- a/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java +++ b/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java @@ -478,11 +478,14 @@ private static double getSolarNoonMidnightUTC(double julianDay, double longitude double tnoon = getJulianCenturiesFromJulianDay(julianDay + longitude / 360.0); double equationOfTime = getEquationOfTime(tnoon); double solNoonUTC = (longitude * 4) - equationOfTime; // minutes - - // second pass - double newt = getJulianCenturiesFromJulianDay(julianDay + solNoonUTC / 1440.0); - equationOfTime = getEquationOfTime(newt); - return (solarEvent == SolarEvent.NOON ? 720 : 1440) + (longitude * 4) - equationOfTime; + + // Refine the equation of time at the calculated transit time. + for (int i = 0; i < 2; i++) { + double newt = getJulianCenturiesFromJulianDay(julianDay + solNoonUTC / 1440.0); + equationOfTime = getEquationOfTime(newt); + solNoonUTC = (solarEvent == SolarEvent.NOON ? 720 : 1440) + (longitude * 4) - equationOfTime; + } + return (solarEvent == SolarEvent.NOON ? 720 : 1440) + (longitude * 4 ) - equationOfTime; } /** From 840939c66222e23bd4408a3bd39c983e61460777 Mon Sep 17 00:00:00 2001 From: Moshe Dicker <75931499+dickermoshe@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:18:00 -0400 Subject: [PATCH 3/4] Handle month transition for NISSAN in JewishDate --- .../com/kosherjava/zmanim/hebrewcalendar/JewishDate.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishDate.java b/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishDate.java index 577c9d5d..0e8a55dd 100644 --- a/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishDate.java +++ b/src/main/java/com/kosherjava/zmanim/hebrewcalendar/JewishDate.java @@ -1093,8 +1093,9 @@ public void minusMonths(int months){ if (month == TISHREI) { month = ELUL; year--; - } else if ((! isJewishLeapYear(year) && month == ADAR) - || (isJewishLeapYear(year) && month == ADAR_II)){ + } else if (month == NISSAN) { + month = getLastMonthOfJewishYear(year); + } else if (!isJewishLeapYear(year) && month == ADAR){ month = SHEVAT; } else { month--; From 8f7acc5b75e4b5590162a629e2c5a71a930c20fb Mon Sep 17 00:00:00 2001 From: Moshe Dicker <75931499+dickermoshe@users.noreply.github.com> Date: Thu, 30 Apr 2026 12:34:28 -0400 Subject: [PATCH 4/4] Fix variable scope for newt in NOAACalculator --- src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java b/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java index 09b5e788..880b42f4 100644 --- a/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java +++ b/src/main/java/com/kosherjava/zmanim/util/NOAACalculator.java @@ -480,8 +480,9 @@ private static double getSolarNoonMidnightUTC(double julianDay, double longitude double solNoonUTC = (longitude * 4) - equationOfTime; // minutes // Refine the equation of time at the calculated transit time. + double newt; for (int i = 0; i < 2; i++) { - double newt = getJulianCenturiesFromJulianDay(julianDay + solNoonUTC / 1440.0); + newt = getJulianCenturiesFromJulianDay(julianDay + solNoonUTC / 1440.0); equationOfTime = getEquationOfTime(newt); solNoonUTC = (solarEvent == SolarEvent.NOON ? 720 : 1440) + (longitude * 4) - equationOfTime; }