Visitar URL original
zmanim/CHANGELOG.md at master · KosherJava/zmanim · GitHub
Skip to content

Latest commit

 

History

History
272 lines (251 loc) · 24.3 KB

CHANGELOG.md

File metadata and controls

272 lines (251 loc) · 24.3 KB

3.1.0 (2026-11-02)

  • GeoLocation Adds support for eastern and western horizon elevation for sunrise and sunset.
  • Significant rewrite of the SPACalculator to more closely match other implementations, while boosting performance.
  • Calculators now cache sunrise, sunset, noon and midnight results, which significantly speeds up generating many zmanim. For example, a day’s calendar needs sunrise several times (for sunrise itself, sof zman krias shema GRA, and others); it is now calculated once. Cached results are only reused for identical inputs, so results are exactly the same as without caching. Caching is on by default and can be turned off with setUseResultCache(false).
  • The SPA and Meeus calculators are faster, because they now reuse the parts of each day’s calculation that are the same for every zman. The SPA calculator was also brought in line with the reference implementation, and now matches it to within about 2 ms. It also now correctly reports no event on polar days where it previously could return an incorrect time. In addition, SPA no longer evaluates its full, expensive solar-position series at every step of a calculation. It evaluates the series at a few points per day, interpolates between them, and verifies every result against the full calculation, falling back to it when needed. This makes it several times faster than the reference implementation, with no loss of accuracy.
  • NOAACalculator, MeeusCalculator: Check solar midnight before reporting no event.
  • NOAACalculator, MeeusCalculator: Don't miss zmanim the sun only just reaches.
  • ComprehensiveZmanimCalendar: Return null for zmanim that fall outside the day on very short polar days, instead of an invalid time:
    • getMinchaGedola30Minutes() and getMinchaGedolaGRAFixedLocalChatzos30Minutes() when the result is after sunset (also avoids a NullPointerException during polar night).
    • getSofZmanShma3HoursBeforeChatzos() and getSofZmanTfila2HoursBeforeChatzos() when the result is before sunrise.
    • getFixedLocalChatzosHayom() when fixed local chatzos is before sunrise or after sunset, along with the half-day zmanim based on it.
    • getBainHashmashosYereim18Minutes(), getBainHashmashosYereim16Point875Minutes() and getBainHashmashosYereim13Point5Minutes() when the result is before plag hamincha GRA.
    • getMinchaKetanaAteretTorah(), getPlagHaminchaAteretTorah(), getMinchaKetanaAhavatShalom() and getPlagAhavatShalom() when the result is after sunset.
  • ComprehensiveZmanimCalendar: getMinchaGedolaGreaterThan30() and getMinchaGedolaAhavatShalom() fall back to the regular mincha gedola when 30 minutes after chatzos is after sunset.
  • ZmanimCalendar
    • getCandleLighting() returns null when candle lighting would be before plag hamincha GRA (very short winter days).
    • isAssurBemelacha() now throws a descriptive IllegalStateException when a day boundary it needs (sunset on erev Shabbos/Yom Tov, tzais on Shabbos/Yom Tov) can't be determined, such as in polar regions, instead of a NullPointerException. Results are unchanged wherever the boundaries exist.
  • ZmanimFormatter: Fix a thread-safety issue in duration formatting (shared static DecimalFormat instances are now per-instance).

3.0.0 (2026-10-21)

Includes breaking changes

  • Remove deprecated methods flagged for removal, including
    • ComprehensiveZmanimcalendar class
      • getSofZmanShmaKolEliyahu()
      • getTzaisGeonim3Point65Degrees() - was prior to 13.5 minutes in Yerushalayim at the equinox/equilux.
      • getTzaisGeonim3Point676Degrees() - was prior to 13.5 minutes in Yerushalayim at the equinox/equilux.
      • getSofZmanTfilahAteretTorah() - use the getSofZmanTfilaAteretTorah()
      • getSofZmanShmaFixedLocal()
      • getSofZmanTfilaFixedLocal()
      • getMinchaGedolaBaalHatanyaGreaterThan30() should now be calculated via ZmanimCalendar.getMinchaGedolaGreaterThan30(Instant minchaGedolaBaalHatanya)
      • getFixedLocalChatzosBasedZmanim(Date, Date, double)
      • Move getSunriseBaalHatanya() and getSunsetBaalHatanya() to the parent ZmanimCalendar class.
      • various mispelled getBainHasmashos() based zmanim (use the properly spelled getBainHasmashos versions
    • JewishCalendar class
      • isVeseinTalUmatarStartDate() - use TefilaRules.isVeseinTalUmatarStartDate()
      • isVeseinTalUmatarStartingTonight() - use TefilaRules.isVeseinTalUmatarStartingTonight()
      • isVeseinTalUmatarRecited() - use TefilaRiles.isVeseinTalUmatarRecited()
      • isVeseinBerachaRecited() - use TefilaRules.isVeseinBerachaRecited()
      • isMashivHaruachStartDate - use TefilaRules.isMashivHaruachStartDate()
      • isMashivHaruachEndDate() - use TefilaRules.isMashivHaruachEndDate()
      • isMashivHaruachRecited() - use TefilaRules.isMashivHaruachRecited()
      • isMoridHatalRecited() - use TefilaRules.isMoridHatalRecited()
  • Remove deprecated redundant GeoLocationUtils. Use the GeoLocation class instead.
  • Remove the com.kosherjava.util.Time class. Now that Sha'os zmaniyos use the java.time.Duration class, this was obsolete.
  • UTF-8 is here. A number of clases have Hebrew in the documentation and code (especially the HebrewDateFormatter class).
  • Move some methods from ComprehensiveZmanimCalendar to the parent ZaminCalendar classes.
    • getShaahZmanis72Minutes()
    • getAlos16Point1Degrees()
    • getSofZmanShmaMGA72Minutes()
    • getSofZmanTfilaMGA72Minutes()
    • getTzaisGeonim8Point5Degrees()
    • getZmanisBasedOffset(double)
  • ZmanimCalendar class rename some generically named method names to be more specific. The actual zmanim were not changed.
    • rename getTzais() -> getTzaisGeonim8Point5Degrees()
    • getAlosHashachar() -> getAlos16Point1Degrees()
    • getSofZmanShmaMGA() -> getSofZmanShmaMGA72Minutes()
    • getSofZmanTfilaMGA() -> getSofZmanTfilaMGA72Minutes()
    • getMinchaGedola() -> getMinchaGedolaGRA()
    • getMinchaKetana() -> getMinchaKetanaGRA()
    • getPlagHamincha() -> getPlagHaminchaGRA()
    • getShaahZmanisMGA() -> getShaahZmanis72Minutes()
    • getAlos72() -> getAlos72Minutes()
    • getTzais72() -> getTzais72Minutes()
    • getShaahZmanisGra() -> getShaahZmanisGRA()
    • getAlos120() -> getAlos120Minutes()
    • getAlos96() -> getAlos96Minutes()
    • getAlos90() -> getAlos90Minutes()
    • getAlos72() -> getAlos72Minutes()
    • getAlos60() -> getAlos60Minutes()
    • getTzais50() -> getTzais50Minutes()
    • getTzais60() -> getTzais60Minutes()
    • getTzais72() -> getTzais72Minutes()
    • getTzais90() -> getTzais90Minutes()
    • getTzais96() -> getTzais96Minutes()
    • getTzais120() -> getTzais120Minutes()
    • getChatzos() -> getChatzosHayom()
    • getChatzosAsHalfDay() -> getChatzosHayomAsHalfDay()
    • isAssurBemlacha() -> isAssurBemelacha()
  • Rename some classes the confusingly named ComplexZmanimCalendar to ComrehensiveZmanimCalendar.
  • Move "legacy" classes to java.time equivelants
    • All zmanim now return Instants insead of Date objects.
    • Replace SimpledateFormat with DateTimeFormatter
    • Calendar and GregorianCalendar were replaced with LocalDate or ZonedDateTime.
    • TimeZone was replace with ZoneId
    • GeoLocation.getLocalMeanTimeOffset() and getAntimeridianAdjustment() now takes in Instant parameter.
    • Remove the no longer necessary NOAACalculator.adjustHourForTimeZone(Calendar)
  • getSofZman*Chametz* times will retun null if it is not Erev Pesach.
  • Move ErevPesach zmanim calculations from the ComprehensiveZmanimCaledar to generic methods in the parent ZmanimCalendar class. Nothing changed in the signatures of the methods in the ComprehensivZemanimCalendar class.
  • Increase the minimum supported JRE version from version 8 (the code currently almost certainly works on 6 today) to Java 11 or higher.
  • Tweaked logic in AstronomicalCalendar.getInstantFromTime() to address issues near the dateline.
  • Improve null handling in ComprehensiveZmanimCalendar.getMoladBasedTime()
  • Add ComprehensiveZmanimCalendar.getMisheyakir12Point85Degrees()
  • Add getMinchaGedolaGreaterThan30(Instant) that allows it to work with any mincha gedola claculation.
  • ComprehensiveZmanimcalendar rename some methods.
    • getMinchaGedolaGreaterThan30()-> getMinchaGedolaGRAGreaterThan30()`
    • getShaahZmanisAlos16Point1ToTzais3Point8() -> getShaahZmanisAlos16Point1DegreesToTzaisGeonim3Point8Degrees()
    • getShaahZmanisAlos16Point1ToTzais3Point7() -> getShaahZmanisAlos16Point1DegreesToTzaisGeonim3Point7Degrees()
    • getSofZmanShmaAlos16Point1ToTzaisGeonim7Point083Degrees() -> getSofZmanShmaAlos16Point1DegreesToTzaisGeonim7Point083Degrees()
    • getPlagAlos16Point1ToTzaisGeonim7Point083Degrees() -> getPlagAlos16Point1DegreesToTzaisGeonim7Point083Degrees()
  • Change / remove ComprehensiveZmanimcalendar zmanim that were too early.
    • getTzaisGeonim4Point37Degrees() -> getTzaisGeonim4Point42Degrees().
    • getTzaisGeonim4Point61Degrees() -> getTzaisGeonim4Point66Degrees()
    • Remove getTzaisGeonim5Point88Degrees() since it is a drop too early
  • ZmanimCalendar Astronomical Chatzos based changes:
    • Add getChatzosHalayla()
    • Add setting useAstronomicalChatzos (defaulted to true) to keep the mistaken compat break introduced in the v2.5.0 release.
    • Add setting useAstronomicalChatzosForOtherZmanim (defaulted to false).
    • Add getChatzosAsHalfDay() to retain the old behavior of chatzos being halfway between sunrise and sunset.
    • Use useAstronomicalChatzos to control if getChatzos() returns getSunTransit() (astronomical chatzos) or getChatzosAsHalfDay().
    • Add getHalfDayBasedZman(Date startOfHalfDay, Date endOfHalfDay, double hours) to allow other zmanim to be impacted by chatzos.
    • Use useAstronomicalChatzosForOtherZmanim.
    • ZmanimCalendar - add utility method getPercentOfShaahZmanisFromDegrees(double degrees, boolean sunset) to simplify zmaniyos time calculations. This allows calculations of various percentage of the day zmanim calculations.
  • Remove code duplication in NOAACalculator.getUTCSunrise() and .getUTCSunset()
  • Use Astronomical Chatzos Halayla (as opposed as halfway between sunset and sunrise or 12 hours after chatzos hayom)
  • ComprehensiveZmanimCalendar - significant updates
  • zmanimFormatter now formats Duration`s and removed support for formatting longs and Time.
  • HebrewdateFormatter
    • add method formatParsha(JewishCalendar.Parsha parsha) to allow formatting of a parsha retrieved from JewishCalendar.getUpcomingParsha().
    • Add getHebrewMonthList() and setHebrewMonthList(String[]). This allows overriding the default month of Chesvan to Marcheshvan etc.
    • Throw an IllegalArgumentException if the array length of months != 14
    • Remove the experimental and private formatMolad(long moladChalakim)
    • Fixed a bug that ignored the leading 0 format.
    • Fix NullPointer in HebrewDateFormatter week formatting
  • TefilaRules
  • JewishCalendar
  • GeoLocation
  • NOAACalculator - fix Solar Azimuth and Elevation
  • AstronomicalCalculator Add some methods
  • AstronomicalCalendar

2.5.0 (2023-06-09)

  • Update ComplexZmanimCalendar.getSolarMidnight() to support astronomocal midnight that works even in the Arctic/Antarctic.
  • Add special Shabbasos/Parshiyos Shuva, Shira, Hagadol, Chazon and Nachamu
  • Fix isYomTov() should return false on Erev Shavuos.
  • Correct spelling of Bein Hashmashos methods the the ComplexZmanimCalendar (was missing the second H).
  • Various Daf Yomi Yerushalmi fixes including:
    • Correct calculation of the daf number.
    • Correct the order of transliterated Yerushalmi masechtos.
    • Correct the Hebrew spelling of the masechta Kilayim.
  • Added number of IS methods such as is isYomKippur(), isSuccos(), isPesach() etc. to the JewishCalendar class.
  • Add isAlHanissimRecited(JewishCalendar) and isYaalehVeyavoRecited(JewishCalendar) to the TefilaRules class.
  • Clarify documentation to explain that isMacharChodesh() Refers to the Haftorah

2.4.0 (2022-11-27)

  • JewishCalendar.getUpcomingParshah() that will return the upcoming Parsha regardless of the day of week.
  • Change YerushalmiYomiCalculator to return null on Yom Kippur and Tisha Be'Av when there is no Daf.
  • Add some Luach Ahavat Shalom Zmanim
  • Add BeHaB to the JewishCalendarclass
  • Add Yom Kippur Katan and Isru Chag to the JewishCalendarclass.
  • Add the TefilaRules class, a utility class for info like:
    • is vesain tal umatar recited etc.
    • is tachanun recited by shacharis or mincha.
    • Is hallel or hallel shalem recited
  • Deprecate the tefila rules methods that existed in JewishCalendar class in favor of using the ones in the TefilaRules class.
  • Add getSamuchLeMinchaKetana zman.
  • Deprecate getSofZmanShmaFixedLocal() and getSofZmanTfilaFixedLocal() with future plans of removal.
  • Deprecate multiple "dangerous" zmanim as an alert to developers, with plans on retaining them.

2.3.0 (2021-12-07)

  • Fix an issue with sof zman kiddush levana being off by an hour when the molad is on one side of the DST change, and the sof zman on the other.
  • Add seasonal davening based zmanim including Vesein Tal Umatar/ Vesein Berachah / Mashiv Haruach.
  • Add Rav Moshe Feinstein's zmanim used in MTJ and Yeshiva of Staten Island.
  • Refactor code for alos and tzeis zmaniyos based time (ports to other languages can simplify things by doing the same).
  • Fix Hebrew spelling of Parshas Nitzavim.

2.2.0 (2021-03-15)

  • Added JewishCalendar.isTaanisBechoros().
  • Updated Javadocs - document sources for getFixedLocalChatzos() and clarify Yerushalmi Yomi Start Date.

2.1.0 (2020-12-02)

  • Added six variants of the Yereim's bain hashmashos zmanim.
  • AstronomicalCalculator.getRefraction() and .getSolarRadius() now have public access.
  • Deprecate the GeoLocationUtils class. All of its functionality is in the GeoLocation class.
  • Updated JavaDocs (no more errors or warnings).
  • Added Lag Ba'omer.
  • Added Shushan Purim Katan.
  • Added Daf.setMasechtaTransliterated(String[] masechtosBavliTransliterated) and Daf.setYerushlmiMasechtaTransliterated(String[] masechtosYerushalmiTransliterated).
  • Simplify and reduce code duplication in ZmanimCalendar generic zmanim calculations.
  • Fix AstronomicalCalendar getSunriseSolarDipFromOffset() and getSunsetSolarDipFromOffset (they are still inefficient) to properly allow calculations before and after sun rise/set.
  • Change some Hebrew lists that are not expected to change to be final.

[2.0.3] (2020-10-01)

  • Semver change (just a versioning change).

[2.02] (2020-09-30)

  • Fix JavaDoc references to new package structure.

[2.01] (2020-09-29)

  • Fix #160 isShabbosMevorchim should return false for the month of Tishrei.
  • Fix #161 a mistake in Zman.toString().
  • Fix java 6 compilation issues.

[2.0] (2020-08-03)

  • Changed package structure to com.kosherjava.zmanim from net.sourceforge.zmanim.
  • Added Maven and Gradle support.
  • Use DST for TimeZone display name (#150).
  • Convert formatMolad() to static.
  • Convert getTimeOffset() to static.
  • Pass alos and tzais parameters for TchilasZmanKidushLevana3Days.
  • Historical daf yomi dates should be final.
  • Add Birkas Hachama, update documentation.
  • Update formatter class for Enums in JewishCalendar.

Older Changes (since 1.3)

  • Default calculator changed from USNO to NOAA.
  • Remove the redundant ZmanimCalculator class (backwards breaking if you used this calculator).
  • Support optional elevation adjustments for zmanim besides sunrise and sunset.
  • Added multiple alternative zmanim .
  • Added Baal Hatanya zmanim.
  • Replaced GPL parsha code with an LGPL kosher version.
  • Added JSON serialization / output (was previously limited to XML).
  • Add Daf Yomi Yerishalmi.
  • Many JewishCalendar related tweaks and enhancements.
  • Many minor bug fixes and enhancements.

See GitHub Commits for more details.