001 /*
002 * Zmanim Java API
003 * Copyright (C) 2004-2010 Eliyahu Hershfeld
004 *
005 * This program is free software; you can redistribute it and/or modify it under the terms of the
006 * GNU General Public License as published by the Free Software Foundation; either version 2 of the
007 * License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
010 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011 * General Public License for more details.
012 *
013 * You should have received a copy of the GNU General Public License along with this program; if
014 * not, write to the Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA
015 * 02111-1307, USA or connect to: http://www.fsf.org/copyleft/gpl.html
016 */
017 package net.sourceforge.zmanim;
018
019 import java.util.Date;
020
021 import net.sourceforge.zmanim.util.AstronomicalCalculator;
022 import net.sourceforge.zmanim.util.GeoLocation;
023
024 /**
025 * This class extends ZmanimCalendar and provides many more zmanim than
026 * available in the ZmanimCalendar. The basis for most zmanim in this class are
027 * from the <em>sefer</em> <b>Yisroel Vehazmanim</b> by <b>Rabbi Yisroel Dovid
028 * Harfenes</b>. <br />
029 * For an example of the number of different <em>zmanim</em> made available by
030 * this class, there are methods to return 12 different calculations for
031 * <em>alos</em> (dawn) available in this class. The real power of this API is
032 * the ease in calculating <em>zmanim</em> that are not part of the API. The
033 * methods for doing <em>zmanim</em> calculations not present in this or it's
034 * superclass the {@link ZmanimCalendar} are contained in the
035 * {@link AstronomicalCalendar}, the base class of the calendars in our API
036 * since they are generic methods for calculating time based on degrees or time
037 * before or after {@link #getSunrise sunrise} and {@link #getSunset sunset} and
038 * are of interest for calculation beyond <em>zmanim</em> calculations. Here are
039 * some examples: <br />
040 * First create the Calendar for the location you would like to calculate:
041 *
042 * <pre>
043 * String locationName = "Lakewood, NJ";
044 * double latitude = 40.0828; // Lakewood, NJ
045 * double longitude = -74.2094; // Lakewood, NJ
046 * double elevation = 0;
047 * // the String parameter in getTimeZone() has to be a valid timezone listed in
048 * // {@link java.util.TimeZone#getAvailableIDs()}
049 * TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
050 * GeoLocation location = new GeoLocation(locationName, latitude, longitude,
051 * elevation, timeZone);
052 * ComplexZmanimCalendar czc = new ComplexZmanimCalendar(location);
053 * </pre>
054 *
055 * Note: For locations such as Israel where the beginning and end of daylight
056 * savings time can fluctuate from year to year create a
057 * {@link java.util.SimpleTimeZone} with the known start and end of DST. <br />
058 * To get alos calculated as 14° below the horizon (as calculated in the
059 * calendars published in Montreal) use:
060 *
061 * <pre>
062 * Date alos14 = czc.getSunriseOffsetByDegrees(14);
063 * </pre>
064 *
065 * To get <em>mincha gedola</em> calculated based on the MGA using a <em>shaah
066 * zmanis</em> based on the day starting 16.1° below the horizon (and ending
067 * 16.1° after sunset the following calculation can be used:
068 *
069 * <pre>
070 * Date minchaGedola = czc.getTimeOffset(czc.getAlos16point1Degrees(),
071 * czc.getShaahZmanis16Point1Degrees() * 6.5);
072 * </pre>
073 *
074 * A little more complex example would be calculating <em>plag hamincha</em>
075 * based on a shaah zmanis that was not present in this class. While a drop more
076 * complex it is still rather easy. For example if you wanted to calculate
077 * <em>plag</em> based on the day starting 12° before sunrise and ending
078 * 12° after sunset as calculated in the calendars in Manchester, England
079 * (there is nothing that would prevent your calculating the day using sunrise
080 * and sunset offsets that are not identical degrees, but this would lead to
081 * chatzos being a time other than the {@link #getSunTransit() solar transit}
082 * (solar midday)). The steps involved would be to first calculate the
083 * <em>shaah zmanis</em> and than use that time in milliseconds to calculate
084 * 10.75 hours after sunrise starting at 12° before sunset
085 *
086 * <pre>
087 * long shaahZmanis = czc.getTemporalHour(czc.getSunriseOffsetByDegrees(12),
088 * czc.getSunsetOffsetByDegrees(12));
089 * Date plag = getTimeOffset(czc.getSunriseOffsetByDegrees(12),
090 * shaahZmanis * 10.75);
091 * </pre>
092 *
093 * <h2>Disclaimer:</h2> While I did my best to get accurate results please do
094 * not rely on these zmanim for <em>halacha lemaaseh</em>
095 *
096 * @author © Eliyahu Hershfeld 2004 - 2010
097 * @version 1.2
098 */
099 public class ComplexZmanimCalendar extends ZmanimCalendar {
100 private static final long serialVersionUID = 1;
101
102 /**
103 * The zenith of 3.7° below {@link #GEOMETRIC_ZENITH geometric zenith}
104 * (90°). This calculation is used for calculating <em>tzais</em>
105 * (nightfall) according to some opinions. This calculation is based on the
106 * opinion of the Geonim that <em>tzais</em> is the time it takes to walk
107 * 3/4 of a Mil at 18 minutes a Mil, or 13.5 minutes after sunset. The sun
108 * is 3.7° below {@link #GEOMETRIC_ZENITH geometric zenith} at this time
109 * in Jerusalem on March 16, about 4 days before the equinox, the day that a
110 * solar hour is one hour.
111 *
112 * TODO AT see #getTzaisGeonim3Point7Degrees()
113 */
114 protected static final double ZENITH_3_POINT_7 = GEOMETRIC_ZENITH + 3.7;
115
116 /**
117 * The zenith of 5.95° below {@link #GEOMETRIC_ZENITH geometric zenith}
118 * (90°). This calculation is used for calculating <em>tzais</em>
119 * (nightfall) according to some opinions. This calculation is based on the
120 * position of the sun 24 minutes after sunset in Jerusalem on March 16,
121 * about 4 days before the equinox, the day that a solar hour is one hour,
122 * which calculates to 5.95° below {@link #GEOMETRIC_ZENITH geometric
123 * zenith}
124 *
125 * @see #getTzaisGeonim5Point95Degrees()
126 */
127 protected static final double ZENITH_5_POINT_95 = GEOMETRIC_ZENITH + 5.95;
128
129 /**
130 * The zenith of 7.083° below {@link #GEOMETRIC_ZENITH geometric zenith}
131 * (90°). This is often referred to as 7°5' or 7° and 5 minutes.
132 * This calculation is used for calculating <em>alos</em> (dawn) and
133 * <em>tzais</em> (nightfall) according to some opinions. This calculation
134 * is based on the position of the sun 30 minutes after sunset in Jerusalem
135 * on March 16, about 4 days before the equinox, the day that a solar hour
136 * is one hour, which calculates to 7.0833333° below
137 * {@link #GEOMETRIC_ZENITH geometric zenith}. This is time some opinions
138 * consider dark enough for 3 stars to be visible. This is the opinion of
139 * the Shu"t Melamed Leho'il, Shu"t Binyan Tziyon, Tenuvas Sadeh and very
140 * close to the time of the Mekor Chesed on the Sefer chasidim.
141 *
142 * @see #getTzaisGeonim7Point083Degrees()
143 * @see #getBainHasmashosRT13Point5MinutesBefore7Point083Degrees()
144 */
145 protected static final double ZENITH_7_POINT_083 = GEOMETRIC_ZENITH + 7
146 + (5 / 60);
147
148 /**
149 * The zenith of 10.2° below {@link #GEOMETRIC_ZENITH geometric zenith}
150 * (90°). This calculation is used for calculating <em>misheyakir</em>
151 * according to some opinions. This calculation is based on the position of
152 * the sun 45 minutes before {@link #getSunrise sunrise} in Jerusalem on
153 * March 16, about 4 days before the equinox, the day that a solar hour is
154 * one hour which calculates to 10.2° below {@link #GEOMETRIC_ZENITH
155 * geometric zenith}
156 *
157 * @see #getMisheyakir10Point2Degrees()
158 */
159 protected static final double ZENITH_10_POINT_2 = GEOMETRIC_ZENITH + 10.2;
160
161 /**
162 * The zenith of 11° below {@link #GEOMETRIC_ZENITH geometric zenith}
163 * (90°). This calculation is used for calculating <em>misheyakir</em>
164 * according to some opinions. This calculation is based on the position of
165 * the sun 48 minutes before {@link #getSunrise sunrise} in Jerusalem on
166 * March 16, about 4 days before the equinox, the day that a solar hour is
167 * one hour which calculates to 11° below {@link #GEOMETRIC_ZENITH
168 * geometric zenith}
169 *
170 * @see #getMisheyakir11Degrees()
171 */
172 protected static final double ZENITH_11_DEGREES = GEOMETRIC_ZENITH + 11;
173
174 /**
175 * The zenith of 11.5° below {@link #GEOMETRIC_ZENITH geometric zenith}
176 * (90°). This calculation is used for calculating <em>misheyakir</em>
177 * according to some opinions. This calculation is based on the position of
178 * the sun 52 minutes before {@link #getSunrise sunrise} in Jerusalem on
179 * March 16, about 4 days before the equinox, the day that a solar hour is
180 * one hour which calculates to 11.5° below {@link #GEOMETRIC_ZENITH
181 * geometric zenith}
182 *
183 * @see #getMisheyakir11Point5Degrees()
184 */
185 protected static final double ZENITH_11_POINT_5 = GEOMETRIC_ZENITH + 11.5;
186
187 /**
188 * The zenith of 13° below {@link #GEOMETRIC_ZENITH geometric zenith}
189 * (90°). This calculation is used for calculating
190 * <em>Rabainu Tam's bain hashmashos</em> according to some opinions. <br/>
191 * <br/>
192 * <b>FIXME:</b> See comments on {@link #getBainHasmashosRT13Degrees}. This
193 * should be changed to 13.2477 after confirmation.
194 *
195 * @see #getBainHasmashosRT13Degrees
196 *
197 */
198 protected static final double ZENITH_13_DEGREES = GEOMETRIC_ZENITH + 13;
199
200 /**
201 * The zenith of 19.8° below {@link #GEOMETRIC_ZENITH geometric zenith}
202 * (90°). This calculation is used for calculating <em>alos</em> (dawn)
203 * and <em>tzais</em> (nightfall) according to some opinions. This
204 * calculation is based on the position of the sun 90 minutes after sunset
205 * in Jerusalem on March 16, about 4 days before the equinox, the day that a
206 * solar hour is one hour which calculates to 19.8° below
207 * {@link #GEOMETRIC_ZENITH geometric zenith}
208 *
209 * @see #getTzais19Point8Degrees()
210 * @see #getAlos19Point8Degrees()
211 * @see #getAlos90()
212 * @see #getTzais90()
213 */
214 protected static final double ZENITH_19_POINT_8 = GEOMETRIC_ZENITH + 19.8;
215
216 /**
217 * The zenith of 26° below {@link #GEOMETRIC_ZENITH geometric zenith}
218 * (90°). This calculation is used for calculating <em>alos</em> (dawn)
219 * and <em>tzais</em> (nightfall) according to some opinions. This
220 * calculation is based on the position of the sun {@link #getAlos120() 120
221 * minutes} after sunset in Jerusalem on March 16, about 4 days before the
222 * equinox, the day that a solar hour is one hour which calculates to
223 * 26° below {@link #GEOMETRIC_ZENITH geometric zenith}
224 *
225 * @see #getAlos26Degrees()
226 * @see #getTzais26Degrees()
227 * @see #getAlos120()
228 * @see #getTzais120()
229 */
230 protected static final double ZENITH_26_DEGREES = GEOMETRIC_ZENITH + 26.0;
231
232 /**
233 * Experimental and may not make the final 1.3 cut
234 */
235
236 /**
237 * The zenith of 4.37° below {@link #GEOMETRIC_ZENITH geometric zenith}
238 * (90°). This calculation is used for calculating <em>tzais</em>
239 * (nightfall) according to some opinions. This calculation is based on the
240 * position of the sun {@link #getTzaisGeonim4Point37Degrees() 16 7/8
241 * minutes} after sunset (3/4 of a 22.5 minute Mil) in Jerusalem on March
242 * 16, about 4 days before the equinox, the day that a solar hour is one
243 * hour which calculates to 4.37° below {@link #GEOMETRIC_ZENITH
244 * geometric zenith}
245 *
246 * @see #getTzaisGeonim4Point37Degrees()
247 */
248 protected static final double ZENITH_4_POINT_37 = GEOMETRIC_ZENITH + 4.37;
249
250 /**
251 * The zenith of 4.61° below {@link #GEOMETRIC_ZENITH geometric zenith}
252 * (90°). This calculation is used for calculating <em>tzais</em>
253 * (nightfall) according to some opinions. This calculation is based on the
254 * position of the sun {@link #getTzaisGeonim4Point37Degrees() 18 minutes}
255 * after sunset (3/4 of a 24 minute Mil) in Jerusalem on March 16, about 4
256 * days before the equinox, the day that a solar hour is one hour which
257 * calculates to 4.61° below {@link #GEOMETRIC_ZENITH geometric zenith}
258 *
259 * @see #getTzaisGeonim4Point61Degrees()
260 */
261 protected static final double ZENITH_4_POINT_61 = GEOMETRIC_ZENITH + 4.61;
262
263 protected static final double ZENITH_4_POINT_8 = GEOMETRIC_ZENITH + 4.8;
264
265 /**
266 * The zenith of 3.65° below {@link #GEOMETRIC_ZENITH geometric zenith}
267 * (90°). This calculation is used for calculating <em>tzais</em>
268 * (nightfall) according to some opinions. This calculation is based on the
269 * position of the sun {@link #getTzaisGeonim3Point65Degrees() 13.5 minutes}
270 * after sunset (3/4 of an 18 minute Mil) in Jerusalem on March 16, about 4
271 * days before the equinox, the day that a solar hour is one hour which
272 * calculates to 3.65° below {@link #GEOMETRIC_ZENITH geometric zenith}
273 *
274 * @see #getTzaisGeonim3Point65Degrees()
275 */
276 protected static final double ZENITH_3_POINT_65 = GEOMETRIC_ZENITH + 3.65;
277
278 protected static final double ZENITH_5_POINT_88 = GEOMETRIC_ZENITH + 5.88;
279
280 private double ateretTorahSunsetOffset = 40;
281
282 public ComplexZmanimCalendar(GeoLocation location) {
283 super(location);
284 }
285
286 /**
287 * Default constructor will set a default {@link GeoLocation#GeoLocation()},
288 * a default {@link AstronomicalCalculator#getDefault()
289 * AstronomicalCalculator} and default the calendar to the current date.
290 *
291 * @see AstronomicalCalendar#AstronomicalCalendar()
292 */
293 public ComplexZmanimCalendar() {
294 super();
295 }
296
297 /**
298 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
299 * a 19.8° dip. This calculation divides the day based on the opinion of
300 * the MGA that the day runs from dawn to dusk. Dawn for this calculation is
301 * when the sun is 19.8° below the eastern geometric horizon before
302 * sunrise. Dusk for this is when the sun is 19.8° below the western
303 * geometric horizon after sunset. This day is split into 12 equal parts
304 * with each part being a <em>shaah zmanis</em>.
305 *
306 * @return the <code>long</code> millisecond length of a
307 * <em>shaah zmanis</em>. If the calculation can't be computed such
308 * as northern and southern locations even south of the Arctic
309 * Circle and north of the Antarctic Circle where the sun may not
310 * reach low enough below the horizon for this calculation, a
311 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
312 * on top of the {@link AstronomicalCalendar} documentation.
313 */
314 public long getShaahZmanis19Point8Degrees() {
315 return getTemporalHour(getAlos19Point8Degrees(),
316 getTzais19Point8Degrees());
317 }
318
319 /**
320 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
321 * a 18° dip. This calculation divides the day based on the opinion of
322 * the MGA that the day runs from dawn to dusk. Dawn for this calculation is
323 * when the sun is 18° below the eastern geometric horizon before
324 * sunrise. Dusk for this is when the sun is 18° below the western
325 * geometric horizon after sunset. This day is split into 12 equal parts
326 * with each part being a <em>shaah zmanis</em>.
327 *
328 * @return the <code>long</code> millisecond length of a
329 * <em>shaah zmanis</em>. If the calculation can't be computed such
330 * as northern and southern locations even south of the Arctic
331 * Circle and north of the Antarctic Circle where the sun may not
332 * reach low enough below the horizon for this calculation, a
333 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
334 * on top of the {@link AstronomicalCalendar} documentation.
335 */
336 public long getShaahZmanis18Degrees() {
337 return getTemporalHour(getAlos18Degrees(), getTzais18Degrees());
338 }
339
340 /**
341 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
342 * a dip of 26°. This calculation divides the day based on the opinion
343 * of the MGA that the day runs from dawn to dusk. Dawn for this calculation
344 * is when the sun is {@link #getAlos26Degrees() 26°} below the eastern
345 * geometric horizon before sunrise. Dusk for this is when the sun is
346 * {@link #getTzais26Degrees() 26°} below the western geometric horizon
347 * after sunset. This day is split into 12 equal parts with each part being
348 * a <em>shaah zmanis</em>.
349 *
350 * @return the <code>long</code> millisecond length of a
351 * <em>shaah zmanis</em>. If the calculation can't be computed such
352 * as northern and southern locations even south of the Arctic
353 * Circle and north of the Antarctic Circle where the sun may not
354 * reach low enough below the horizon for this calculation, a
355 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
356 * on top of the {@link AstronomicalCalendar} documentation.
357 */
358 public long getShaahZmanis26Degrees() {
359 return getTemporalHour(getAlos26Degrees(), getTzais26Degrees());
360 }
361
362 /**
363 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
364 * a dip of 16.1°. This calculation divides the day based on the opinion
365 * that the day runs from dawn to dusk. Dawn for this calculation is when
366 * the sun is 16.1° below the eastern geometric horizon before sunrise
367 * and dusk is when the sun is 16.1° below the western geometric horizon
368 * after sunset. This day is split into 12 equal parts with each part being
369 * a <em>shaah zmanis</em>.
370 *
371 * @return the <code>long</code> millisecond length of a
372 * <em>shaah zmanis</em>. If the calculation can't be computed such
373 * as northern and southern locations even south of the Arctic
374 * Circle and north of the Antarctic Circle where the sun may not
375 * reach low enough below the horizon for this calculation, a
376 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
377 * on top of the {@link AstronomicalCalendar} documentation.
378 * @see #getAlos16Point1Degrees()
379 * @see #getTzais16Point1Degrees()
380 * @see #getSofZmanShmaMGA16Point1Degrees()
381 * @see #getSofZmanTfilaMGA16Point1Degrees()
382 * @see #getMinchaGedola16Point1Degrees()
383 * @see #getMinchaKetana16Point1Degrees()
384 * @see #getPlagHamincha16Point1Degrees()
385 */
386
387 public long getShaahZmanis16Point1Degrees() {
388 return getTemporalHour(getAlos16Point1Degrees(),
389 getTzais16Point1Degrees());
390 }
391
392 /**
393 * Method to return a <em>shaah zmanis</em> (solar hour) according to the
394 * opinion of the MGA. This calculation divides the day based on the opinion
395 * of the <em>MGA</em> that the day runs from dawn to dusk. Dawn for this
396 * calculation is 60 minutes before sunrise and dusk is 60 minutes after
397 * sunset. This day is split into 12 equal parts with each part being a
398 * <em>shaah zmanis</em>. Alternate mothods of calculating a
399 * <em>shaah zmanis</em> are available in the subclass
400 * {@link ComplexZmanimCalendar}
401 *
402 * @return the <code>long</code> millisecond length of a
403 * <em>shaah zmanis</em>. If the calculation can't be computed such
404 * as in the Arctic Circle where there is at least one day a year
405 * where the sun does not rise, and one where it does not set, a
406 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
407 * on top of the {@link AstronomicalCalendar} documentation.
408 */
409 public long getShaahZmanis60Minutes() {
410 return getTemporalHour(getAlos60(), getTzais60());
411 }
412
413 /**
414 * Method to return a <em>shaah zmanis</em> (solar hour) according to the
415 * opinion of the MGA. This calculation divides the day based on the opinion
416 * of the <em>MGA</em> that the day runs from dawn to dusk. Dawn for this
417 * calculation is 72 minutes before sunrise and dusk is 72 minutes after
418 * sunset. This day is split into 12 equal parts with each part being a
419 * <em>shaah zmanis</em>. Alternate mothods of calculating a
420 * <em>shaah zmanis</em> are available in the subclass
421 * {@link ComplexZmanimCalendar}
422 *
423 * @return the <code>long</code> millisecond length of a
424 * <em>shaah zmanis</em>. If the calculation can't be computed such
425 * as in the Arctic Circle where there is at least one day a year
426 * where the sun does not rise, and one where it does not set, a
427 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
428 * on top of the {@link AstronomicalCalendar} documentation.
429 */
430 public long getShaahZmanis72Minutes() {
431 return getShaahZmanisMGA();
432 }
433
434 /**
435 * Method to return a <em>shaah zmanis</em> (temporal hour) according to the
436 * opinion of the MGA based on <em>alos</em> being
437 * {@link #getAlos72Zmanis() 72} minutes <em>zmaniyos</em> before
438 * {@link #getSunrise() sunrise}. This calculation divides the day based on
439 * the opinion of the <em>MGA</em> that the day runs from dawn to dusk. Dawn
440 * for this calculation is 72 minutes <em>zmaniyos</em> before sunrise and
441 * dusk is 72 minutes <em>zmaniyos</em> after sunset. This day is split into
442 * 12 equal parts with each part being a <em>shaah zmanis</em>. This is
443 * identical to 1/10th of the day from {@link #getSunrise() sunrise} to
444 * {@link #getSunset() sunset}.
445 *
446 * @return the <code>long</code> millisecond length of a
447 * <em>shaah zmanis</em>. If the calculation can't be computed such
448 * as in the Arctic Circle where there is at least one day a year
449 * where the sun does not rise, and one where it does not set, a
450 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
451 * on top of the {@link AstronomicalCalendar} documentation.
452 * @see #getAlos72Zmanis()
453 * @see #getTzais72Zmanis()
454 */
455 public long getShaahZmanis72MinutesZmanis() {
456 return getTemporalHour(getAlos72Zmanis(), getTzais72Zmanis());
457 }
458
459 /**
460 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
461 * a dip of 90 minutes. This calculation divides the day based on the
462 * opinion of the MGA that the day runs from dawn to dusk. Dawn for this
463 * calculation is 90 minutes before sunrise and dusk is 90 minutes after
464 * sunset. This day is split into 12 equal parts with each part being a
465 * <em>shaah zmanis</em>.
466 *
467 * @return the <code>long</code> millisecond length of a
468 * <em>shaah zmanis</em>. If the calculation can't be computed such
469 * as in the Arctic Circle where there is at least one day a year
470 * where the sun does not rise, and one where it does not set, a
471 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
472 * on top of the {@link AstronomicalCalendar} documentation.
473 */
474 public long getShaahZmanis90Minutes() {
475 return getTemporalHour(getAlos90(), getTzais90());
476 }
477
478 /**
479 * Method to return a <em>shaah zmanis</em> (temporal hour) according to the
480 * opinion of the MGA based on <em>alos</em> being
481 * {@link #getAlos90Zmanis() 90} minutes <em>zmaniyos</em> before
482 * {@link #getSunrise() sunrise}. This calculation divides the day based on
483 * the opinion of the <em>MGA</em> that the day runs from dawn to dusk. Dawn
484 * for this calculation is 90 minutes <em>zmaniyos</em> before sunrise and
485 * dusk is 90 minutes <em>zmaniyos</em> after sunset. This day is split into
486 * 12 equal parts with each part being a <em>shaah zmanis</em>. This is
487 * identical to 1/8th of the day from {@link #getSunrise() sunrise} to
488 * {@link #getSunset() sunset}.
489 *
490 * @return the <code>long</code> millisecond length of a
491 * <em>shaah zmanis</em>. If the calculation can't be computed such
492 * as in the Arctic Circle where there is at least one day a year
493 * where the sun does not rise, and one where it does not set, a
494 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
495 * on top of the {@link AstronomicalCalendar} documentation.
496 * @see #getAlos90Zmanis()
497 * @see #getTzais90Zmanis()
498 */
499 public long getShaahZmanis90MinutesZmanis() {
500 return getTemporalHour(getAlos90Zmanis(), getTzais90Zmanis());
501 }
502
503 /**
504 * Method to return a <em>shaah zmanis</em> (temporal hour) according to the
505 * opinion of the MGA based on <em>alos</em> being
506 * {@link #getAlos96Zmanis() 96} minutes <em>zmaniyos</em> before
507 * {@link #getSunrise() sunrise}. This calculation divides the day based on
508 * the opinion of the <em>MGA</em> that the day runs from dawn to dusk. Dawn
509 * for this calculation is 96 minutes <em>zmaniyos</em> before sunrise and
510 * dusk is 96 minutes <em>zmaniyos</em> after sunset. This day is split into
511 * 12 equal parts with each part being a <em>shaah zmanis</em>. This is
512 * identical to 1/7.5th of the day from {@link #getSunrise() sunrise} to
513 * {@link #getSunset() sunset}.
514 *
515 * @return the <code>long</code> millisecond length of a
516 * <em>shaah zmanis</em>. If the calculation can't be computed such
517 * as in the Arctic Circle where there is at least one day a year
518 * where the sun does not rise, and one where it does not set, a
519 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
520 * on top of the {@link AstronomicalCalendar} documentation.
521 * @see #getAlos96Zmanis()
522 * @see #getTzais96Zmanis()
523 */
524 public long getShaahZmanis96MinutesZmanis() {
525 return getTemporalHour(getAlos96Zmanis(), getTzais96Zmanis());
526 }
527
528 /**
529 * Method to return a <em>shaah zmanis</em> (temporal hour) according to the
530 * opinion of the Chacham Yosef Harari-Raful of Yeshivat Ateret Torah
531 * calculated with <em>alos</em> being 1/10th of sunrise to sunset day, or
532 * {@link #getAlos72Zmanis() 72} minutes <em>zmaniyos</em> of such a day
533 * before {@link #getSunrise() sunrise}, and tzais is usually calculated as
534 * {@link #getTzaisAteretTorah() 40 minutes} after {@link #getSunset()
535 * sunset}. This day is split into 12 equal parts with each part being a
536 * <em>shaah zmanis</em>. Note that with this system, chatzos (mid-day) will
537 * not be the point that the sun is {@link #getSunTransit() halfway across
538 * the sky}.
539 *
540 * @return the <code>long</code> millisecond length of a
541 * <em>shaah zmanis</em>. If the calculation can't be computed such
542 * as in the Arctic Circle where there is at least one day a year
543 * where the sun does not rise, and one where it does not set, a
544 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
545 * on top of the {@link AstronomicalCalendar} documentation.
546 * @see #getAlos72Zmanis()
547 * @see #getTzaisAteretTorah()
548 * @see #getAteretTorahSunsetOffset()
549 * @see #setAteretTorahSunsetOffset(double)
550 */
551 public long getShaahZmanisAteretTorah() {
552 return getTemporalHour(getAlos72Zmanis(), getTzaisAteretTorah());
553 }
554
555 /**
556 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
557 * a dip of 96 minutes. This calculation divides the day based on the
558 * opinion of the MGA that the day runs from dawn to dusk. Dawn for this
559 * calculation is 96 minutes before sunrise and dusk is 96 minutes after
560 * sunset. This day is split into 12 equal parts with each part being a
561 * <em>shaah zmanis</em>.
562 *
563 * @return the <code>long</code> millisecond length of a
564 * <em>shaah zmanis</em>. If the calculation can't be computed such
565 * as in the Arctic Circle where there is at least one day a year
566 * where the sun does not rise, and one where it does not set, a
567 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
568 * on top of the {@link AstronomicalCalendar} documentation.
569 */
570 public long getShaahZmanis96Minutes() {
571 return getTemporalHour(getAlos96(), getTzais96());
572 }
573
574 /**
575 * Method to return a <em>shaah zmanis</em> (temporal hour) calculated using
576 * a dip of 120 minutes. This calculation divides the day based on the
577 * opinion of the MGA that the day runs from dawn to dusk. Dawn for this
578 * calculation is 120 minutes before sunrise and dusk is 120 minutes after
579 * sunset. This day is split into 12 equal parts with each part being a
580 * <em>shaah zmanis</em>.
581 *
582 * @return the <code>long</code> millisecond length of a
583 * <em>shaah zmanis</em>. If the calculation can't be computed such
584 * as in the Arctic Circle where there is at least one day a year
585 * where the sun does not rise, and one where it does not set, a
586 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
587 * on top of the {@link AstronomicalCalendar} documentation.
588 */
589 public long getShaahZmanis120Minutes() {
590 return getTemporalHour(getAlos120(), getTzais120());
591 }
592
593 /**
594 * Method to return a <em>shaah zmanis</em> (temporal hour) according to the
595 * opinion of the MGA based on <em>alos</em> being
596 * {@link #getAlos120Zmanis() 120} minutes <em>zmaniyos</em> before
597 * {@link #getSunrise() sunrise}. This calculation divides the day based on
598 * the opinion of the <em>MGA</em> that the day runs from dawn to dusk. Dawn
599 * for this calculation is 120 minutes <em>zmaniyos</em> before sunrise and
600 * dusk is 120 minutes <em>zmaniyos</em> after sunset. This day is split
601 * into 12 equal parts with each part being a <em>shaah zmanis</em>. This is
602 * identical to 1/6th of the day from {@link #getSunrise() sunrise} to
603 * {@link #getSunset() sunset}.
604 *
605 * @return the <code>long</code> millisecond length of a
606 * <em>shaah zmanis</em>. If the calculation can't be computed such
607 * as in the Arctic Circle where there is at least one day a year
608 * where the sun does not rise, and one where it does not set, a
609 * {@link Long#MIN_VALUE} will be returned. See detailed explanation
610 * on top of the {@link AstronomicalCalendar} documentation.
611 * @see #getAlos120Zmanis()
612 * @see #getTzais120Zmanis()
613 */
614 public long getShaahZmanis120MinutesZmanis() {
615 return getTemporalHour(getAlos120Zmanis(), getTzais120Zmanis());
616 }
617
618 /**
619 * This method returns the time of <em>plag hamincha</em>. This is
620 * calculated as 10.75 hours after {@link #getAlos120Zmanis() dawn}. The
621 * formula used is:<br/>
622 * 10.75 * {@link #getShaahZmanis120MinutesZmanis()} after
623 * {@link #getAlos120Zmanis() dawn}.
624 *
625 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
626 * the calculation can't be computed such as in the Arctic Circle
627 * where there is at least one day a year where the sun does not
628 * rise, and one where it does not set, a null will be returned. See
629 * detailed explanation on top of the {@link AstronomicalCalendar}
630 * documentation.
631 */
632 public Date getPlagHamincha120MinutesZmanis() {
633 return getTimeOffset(getAlos120Zmanis(),
634 getShaahZmanis120MinutesZmanis() * 10.75);
635 }
636
637 /**
638 * This method returns the time of <em>plag hamincha</em>. This is
639 * calculated as 10.75 hours after {@link #getAlos120() dawn}. The formula
640 * used is:<br/>
641 * 10.75 {@link #getShaahZmanis120Minutes()} after {@link #getAlos120()}.
642 *
643 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
644 * the calculation can't be computed such as in the Arctic Circle
645 * where there is at least one day a year where the sun does not
646 * rise, and one where it does not set, a null will be returned. See
647 * detailed explanation on top of the {@link AstronomicalCalendar}
648 * documentation.
649 */
650 public Date getPlagHamincha120Minutes() {
651 return getTimeOffset(getAlos120(), getShaahZmanis120Minutes() * 10.75);
652 }
653
654 /**
655 * Method to return <em>alos</em> (dawn) calculated using 60 minutes before
656 * {@link #getSeaLevelSunrise() sea level sunrise} on the time to walk the
657 * distance of 4 <em>Mil</em> at 15 minutes a <em>Mil</em> (the opinion of
658 * the Chavas Yair. See the Divray Malkiel). This is based on the opinion of
659 * most <em>Rishonim</em> who stated that the time of the <em>Neshef</em>
660 * (time between dawn and sunrise) does not vary by the time of year or
661 * location but purely depends on the time it takes to walk the distance of
662 * 4 <em>Mil</em>.
663 *
664 * @return the <code>Date</code> representing the time. If the calculation
665 * can't be computed such as in the Arctic Circle where there is at
666 * least one day a year where the sun does not rise, and one where
667 * it does not set, a null will be returned. See detailed
668 * explanation on top of the {@link AstronomicalCalendar}
669 * documentation.
670 */
671 public Date getAlos60() {
672 return getTimeOffset(getSeaLevelSunrise(), -60 * MINUTE_MILLIS);
673 }
674
675 /**
676 * Method to return <em>alos</em> (dawn) calculated using 72 minutes
677 * <em>zmaniyos</em>( <em>GR"A</em> and the <em>Baal Hatanya</em>) or 1/10th
678 * of the day before sea level sunrise. This is based on an 18 minute
679 * <em>Mil</em> so the time for 4 <em>Mil</em> is 72 minutes which is 1/10th
680 * of a day (12 * 60 = 720) based on the day starting at
681 * {@link #getSeaLevelSunrise() sea level sunrise} and ending at
682 * {@link #getSeaLevelSunset() sea level sunset}. The actual alculation is
683 * {@link #getSeaLevelSunrise()}- ( {@link #getShaahZmanisGra()} * 1.2).
684 * This calculation is used in the calendars published by
685 * <em>Hisachdus Harabanim D'Artzos Habris Ve'Kanada</em>
686 *
687 * @return the <code>Date</code> representing the time. If the calculation
688 * can't be computed such as in the Arctic Circle where there is at
689 * least one day a year where the sun does not rise, and one where
690 * it does not set, a null will be returned. See detailed
691 * explanation on top of the {@link AstronomicalCalendar}
692 * documentation.
693 * @see #getShaahZmanisGra()
694 */
695 public Date getAlos72Zmanis() {
696 long shaahZmanis = getShaahZmanisGra();
697 if (shaahZmanis == Long.MIN_VALUE) {
698 return null;
699 }
700 return getTimeOffset(getSeaLevelSunrise(), (long) (shaahZmanis * -1.2));
701 }
702
703 /**
704 * Method to return <em>alos</em> (dawn) calculated using 96 minutes before
705 * {@link #getSeaLevelSunrise() sea level sunrise} based on the time to walk
706 * the distance of 4 <em>Mil</em> at 24 minutes a <em>Mil</em>. This is
707 * based on the opinion of most <em>Rishonim</em> who stated that the time
708 * of the <em>Neshef</em> (time between dawn and sunrise) does not vary by
709 * the time of year or location but purely depends on the time it takes to
710 * walk the distance of 4 <em>Mil</em>.
711 *
712 * @return the <code>Date</code> representing the time. If the calculation
713 * can't be computed such as in the Arctic Circle where there is at
714 * least one day a year where the sun does not rise, and one where
715 * it does not set, a null will be returned. See detailed
716 * explanation on top of the {@link AstronomicalCalendar}
717 * documentation.
718 */
719 public Date getAlos96() {
720 return getTimeOffset(getSeaLevelSunrise(), -96 * MINUTE_MILLIS);
721 }
722
723 /**
724 * Method to return <em>alos</em> (dawn) calculated using 90 minutes
725 * <em>zmaniyos</em>( <em>GR"A</em> and the <em>Baal Hatanya</em>) or 1/8th
726 * of the day before sea level sunrise. This is based on a 22.5 minute
727 * <em>Mil</em> so the time for 4 <em>Mil</em> is 90 minutes which is 1/8th
728 * of a day (12 * 60 = 720) /8 =90 based on the day starting at
729 * {@link #getSunrise() sunrise} and ending at {@link #getSunset() sunset}.
730 * The actual calculation is {@link #getSunrise()} - (
731 * {@link #getShaahZmanisGra()} * 1.5).
732 *
733 * @return the <code>Date</code> representing the time. If the calculation
734 * can't be computed such as in the Arctic Circle where there is at
735 * least one day a year where the sun does not rise, and one where
736 * it does not set, a null will be returned. See detailed
737 * explanation on top of the {@link AstronomicalCalendar}
738 * documentation.
739 * @see #getShaahZmanisGra()
740 */
741 public Date getAlos90Zmanis() {
742 long shaahZmanis = getShaahZmanisGra();
743 if (shaahZmanis == Long.MIN_VALUE) {
744 return null;
745 }
746 return getTimeOffset(getSeaLevelSunrise(), (long) (shaahZmanis * -1.5));
747 }
748
749 /**
750 * Method to return <em>alos</em> (dawn) calculated using 90 minutes
751 * <em>zmaniyos</em>( <em>GR"A</em> and the <em>Baal Hatanya</em>) or 1/8th
752 * of the day before sea level sunrise. This is based on a 24 minute
753 * <em>Mil</em> so the time for 4 <em>Mil</em> is 90 minutes which is
754 * 1/7.5th of a day (12 * 60 = 720) / 7.5 =96 based on the day starting at
755 * {@link #getSunrise() sunrise} and ending at {@link #getSunset() sunset}.
756 * The actual calculation is {@link #getSunrise()} - (
757 * {@link #getShaahZmanisGra()} * 1.6).
758 *
759 * @return the <code>Date</code> representing the time. If the calculation
760 * can't be computed such as in the Arctic Circle where there is at
761 * least one day a year where the sun does not rise, and one where
762 * it does not set, a null will be returned. See detailed
763 * explanation on top of the {@link AstronomicalCalendar}
764 * documentation.
765 * @see #getShaahZmanisGra()
766 */
767 public Date getAlos96Zmanis() {
768 long shaahZmanis = getShaahZmanisGra();
769 if (shaahZmanis == Long.MIN_VALUE) {
770 return null;
771 }
772 return getTimeOffset(getSeaLevelSunrise(), (long) (shaahZmanis * -1.6));
773 }
774
775 /**
776 * Method to return <em>alos</em> (dawn) calculated using 90 minutes before
777 * {@link #getSeaLevelSunrise() sea level sunrise} on the time to walk the
778 * distance of 4 <em>Mil</em> at 22.5 minutes a <em>Mil</em>. This is based
779 * on the opinion of most <em>Rishonim</em> who stated that the time of the
780 * <em>Neshef</em> (time between dawn and sunrise) does not vary by the time
781 * of year or location but purely depends on the time it takes to walk the
782 * distance of 4 <em>Mil</em>.
783 *
784 * @return the <code>Date</code> representing the time. If the calculation
785 * can't be computed such as in the Arctic Circle where there is at
786 * least one day a year where the sun does not rise, and one where
787 * it does not set, a null will be returned. See detailed
788 * explanation on top of the {@link AstronomicalCalendar}
789 * documentation.
790 */
791 public Date getAlos90() {
792 return getTimeOffset(getSeaLevelSunrise(), -90 * MINUTE_MILLIS);
793 }
794
795 /**
796 * Method to return <em>alos</em> (dawn) calculated using 120 minutes before
797 * {@link #getSeaLevelSunrise() sea level sunrise} (no adjustment for
798 * elevation is made) based on the time to walk the distance of 5
799 * <em>Mil</em>( <em>Ula</em>) at 24 minutes a <em>Mil</em>. This is based
800 * on the opinion of most <em>Rishonim</em> who stated that the time of the
801 * <em>Neshef</em> (time between dawn and sunrise) does not vary by the time
802 * of year or location but purely depends on the time it takes to walk the
803 * distance of 5 <em>Mil</em>(<em>Ula</em>).
804 *
805 * @return the <code>Date</code> representing the time. If the calculation
806 * can't be computed such as in the Arctic Circle where there is at
807 * least one day a year where the sun does not rise, and one where
808 * it does not set, a null will be returned. See detailed
809 * explanation on top of the {@link AstronomicalCalendar}
810 * documentation.
811 */
812 public Date getAlos120() {
813 return getTimeOffset(getSeaLevelSunrise(), -120 * MINUTE_MILLIS);
814 }
815
816 /**
817 * Method to return <em>alos</em> (dawn) calculated using 120 minutes
818 * <em>zmaniyos</em>( <em>GR"A</em> and the <em>Baal Hatanya</em>) or 1/6th
819 * of the day before sea level sunrise. This is based on a 24 minute
820 * <em>Mil</em> so the time for 5 <em>Mil</em> is 120 minutes which is 1/6th
821 * of a day (12 * 60 = 720) / 6 =120 based on the day starting at
822 * {@link #getSunrise() sunrise} and ending at {@link #getSunset() sunset}.
823 * The actual calculation is {@link #getSunrise()} - (
824 * {@link #getShaahZmanisGra()} * 2).
825 *
826 * @return the <code>Date</code> representing the time. If the calculation
827 * can't be computed such as in the Arctic Circle where there is at
828 * least one day a year where the sun does not rise, and one where
829 * it does not set, a null will be returned. See detailed
830 * explanation on top of the {@link AstronomicalCalendar}
831 * documentation.
832 * @see #getShaahZmanisGra()
833 */
834 public Date getAlos120Zmanis() {
835 long shaahZmanis = getShaahZmanisGra();
836 if (shaahZmanis == Long.MIN_VALUE) {
837 return null;
838 }
839 return getTimeOffset(getSeaLevelSunrise(), shaahZmanis * -2);
840 }
841
842 /**
843 * Method to return <em>alos</em> (dawn) calculated when the sun is
844 * {@link #ZENITH_26_DEGREES 26°} below the eastern geometric horizon
845 * before sunrise. This calculation is based on the same calculation of
846 * {@link #getAlos120() 120 minutes} but uses a degree based calculation
847 * instead of 120 exact minutes. This calculation is based on the position
848 * of the sun 120 minutes before sunrise in Jerusalem in the equinox which
849 * calculates to 26° below {@link #GEOMETRIC_ZENITH geometric zenith}.
850 *
851 * @return the <code>Date</code> representing <em>alos</em>. If the
852 * calculation can't be computed such as northern and southern
853 * locations even south of the Arctic Circle and north of the
854 * Antarctic Circle where the sun may not reach low enough below the
855 * horizon for this calculation, a null will be returned. See
856 * detailed explanation on top of the {@link AstronomicalCalendar}
857 * documentation.
858 * @see #ZENITH_26_DEGREES
859 * @see #getAlos120()
860 * @see #getTzais120()
861 */
862 public Date getAlos26Degrees() {
863 return getSunriseOffsetByDegrees(ZENITH_26_DEGREES);
864 }
865
866 /**
867 * to return <em>alos</em> (dawn) calculated when the sun is
868 * {@link #ASTRONOMICAL_ZENITH 18°} below the eastern geometric horizon
869 * before sunrise.
870 *
871 * @return the <code>Date</code> representing <em>alos</em>. If the
872 * calculation can't be computed such as northern and southern
873 * locations even south of the Arctic Circle and north of the
874 * Antarctic Circle where the sun may not reach low enough below the
875 * horizon for this calculation, a null will be returned. See
876 * detailed explanation on top of the {@link AstronomicalCalendar}
877 * documentation.
878 * @see #ASTRONOMICAL_ZENITH
879 */
880 public Date getAlos18Degrees() {
881 return getSunriseOffsetByDegrees(ASTRONOMICAL_ZENITH);
882 }
883
884 /**
885 * Method to return <em>alos</em> (dawn) calculated when the sun is
886 * {@link #ZENITH_19_POINT_8 19.8°} below the eastern geometric horizon
887 * before sunrise. This calculation is based on the same calculation of
888 * {@link #getAlos90() 90 minutes} but uses a degree based calculation
889 * instead of 90 exact minutes. This calculation is based on the position of
890 * the sun 90 minutes before sunrise in Jerusalem in the equinox which
891 * calculates to 19.8° below {@link #GEOMETRIC_ZENITH geometric zenith}
892 *
893 * @return the <code>Date</code> representing <em>alos</em>. If the
894 * calculation can't be computed such as northern and southern
895 * locations even south of the Arctic Circle and north of the
896 * Antarctic Circle where the sun may not reach low enough below the
897 * horizon for this calculation, a null will be returned. See
898 * detailed explanation on top of the {@link AstronomicalCalendar}
899 * documentation.
900 * @see #ZENITH_19_POINT_8
901 * @see #getAlos90()
902 */
903 public Date getAlos19Point8Degrees() {
904 return getSunriseOffsetByDegrees(ZENITH_19_POINT_8);
905 }
906
907 /**
908 * Method to return <em>alos</em> (dawn) calculated when the sun is
909 * {@link #ZENITH_16_POINT_1 16.1°} below the eastern geometric horizon
910 * before sunrise. This calculation is based on the same calculation of
911 * {@link #getAlos72() 72 minutes} but uses a degree based calculation
912 * instead of 72 exact minutes. This calculation is based on the position of
913 * the sun 72 minutes before sunrise in Jerusalem in the equinox which
914 * calculates to 16.1° below {@link #GEOMETRIC_ZENITH geometric zenith}.
915 *
916 * @return the <code>Date</code> representing <em>alos</em>. If the
917 * calculation can't be computed such as northern and southern
918 * locations even south of the Arctic Circle and north of the
919 * Antarctic Circle where the sun may not reach low enough below the
920 * horizon for this calculation, a null will be returned. See
921 * detailed explanation on top of the {@link AstronomicalCalendar}
922 * documentation.
923 * @see #ZENITH_16_POINT_1
924 * @see #getAlos72()
925 */
926 public Date getAlos16Point1Degrees() {
927 return getSunriseOffsetByDegrees(ZENITH_16_POINT_1);
928 }
929
930 /**
931 * This method returns <em>misheyakir</em> based on the position of the sun
932 * when it is {@link #ZENITH_11_DEGREES 11.5°} below
933 * {@link #GEOMETRIC_ZENITH geometric zenith} (90°). This calculation is
934 * used for calculating <em>misheyakir</em> according to some opinions. This
935 * calculation is based on the position of the sun 52 minutes before
936 * {@link #getSunrise sunrise}in Jerusalem in the equinox which calculates
937 * to 11.5° below {@link #GEOMETRIC_ZENITH geometric zenith}
938 *
939 * @return the <code>Date</code> of misheyakir. If the calculation can't be
940 * computed such as northern and southern locations even south of
941 * the Arctic Circle and north of the Antarctic Circle where the sun
942 * may not reach low enough below the horizon for this calculation,
943 * a null will be returned. See detailed explanation on top of the
944 * {@link AstronomicalCalendar} documentation.
945 * @see #ZENITH_11_POINT_5
946 */
947 public Date getMisheyakir11Point5Degrees() {
948 return getSunriseOffsetByDegrees(ZENITH_11_POINT_5);
949 }
950
951 /**
952 * This method returns <em>misheyakir</em> based on the position of the sun
953 * when it is {@link #ZENITH_11_DEGREES 11°} below
954 * {@link #GEOMETRIC_ZENITH geometric zenith} (90°). This calculation is
955 * used for calculating <em>misheyakir</em> according to some opinions. This
956 * calculation is based on the position of the sun 48 minutes before
957 * {@link #getSunrise sunrise}in Jerusalem in the equinox which calculates
958 * to 11° below {@link #GEOMETRIC_ZENITH geometric zenith}
959 *
960 * @return If the calculation can't be computed such as northern and
961 * southern locations even south of the Arctic Circle and north of
962 * the Antarctic Circle where the sun may not reach low enough below
963 * the horizon for this calculation, a null will be returned. See
964 * detailed explanation on top of the {@link AstronomicalCalendar}
965 * documentation.
966 * @see #ZENITH_11_DEGREES
967 */
968 public Date getMisheyakir11Degrees() {
969 return getSunriseOffsetByDegrees(ZENITH_11_DEGREES);
970 }
971
972 /**
973 * This method returns <em>misheyakir</em> based on the position of the sun
974 * when it is {@link #ZENITH_10_POINT_2 10.2°} below
975 * {@link #GEOMETRIC_ZENITH geometric zenith} (90°). This calculation is
976 * used for calculating <em>misheyakir</em> according to some opinions. This
977 * calculation is based on the position of the sun 45 minutes before
978 * {@link #getSunrise sunrise} in Jerusalem in the equinox which calculates
979 * to 10.2° below {@link #GEOMETRIC_ZENITH geometric zenith}
980 *
981 * @return the <code>Date</code> of the latest misheyakir. If the
982 * calculation can't be computed such as northern and southern
983 * locations even south of the Arctic Circle and north of the
984 * Antarctic Circle where the sun may not reach low enough below the
985 * horizon for this calculation, a null will be returned. See
986 * detailed explanation on top of the {@link AstronomicalCalendar}
987 * documentation.
988 * @see #ZENITH_10_POINT_2
989 */
990 public Date getMisheyakir10Point2Degrees() {
991 return getSunriseOffsetByDegrees(ZENITH_10_POINT_2);
992 }
993
994 /**
995 * This method returns the latest <em>zman krias shema</em> (time to say
996 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
997 * <em>alos</em> being {@link #getAlos19Point8Degrees()() 19.8°} before
998 * {@link #getSunrise() sunrise}. This time is 3
999 * <em>{@link #getShaahZmanis19Point8Degrees() shaos zmaniyos}</em> (solar
1000 * hours) after {@link #getAlos19Point8Degrees() dawn} based on the opinion
1001 * of the <em>MG"A</em> that the day is calculated from dawn to nightfall
1002 * with both being 19.8° below sunrise or sunset. This returns the time
1003 * of 3 {@link #getShaahZmanis19Point8Degrees()} after
1004 * {@link #getAlos19Point8Degrees() dawn}.
1005 *
1006 * @return the <code>Date</code> of the latest zman shema. If the
1007 * calculation can't be computed such as northern and southern
1008 * locations even south of the Arctic Circle and north of the
1009 * Antarctic Circle where the sun may not reach low enough below the
1010 * horizon for this calculation, a null will be returned. See
1011 * detailed explanation on top of the {@link AstronomicalCalendar}
1012 * documentation.
1013 * @see #getShaahZmanis19Point8Degrees()
1014 * @see #getAlos19Point8Degrees()
1015 */
1016 public Date getSofZmanShmaMGA19Point8Degrees() {
1017 return getTimeOffset(getAlos19Point8Degrees(),
1018 getShaahZmanis19Point8Degrees() * 3);
1019 }
1020
1021 /**
1022 * This method returns the latest <em>zman krias shema</em> (time to say
1023 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1024 * <em>alos</em> being {@link #getAlos16Point1Degrees()() 16.1°} before
1025 * {@link #getSunrise() sunrise}. This time is 3
1026 * <em>{@link #getShaahZmanis16Point1Degrees() shaos zmaniyos}</em> (solar
1027 * hours) after {@link #getAlos16Point1Degrees() dawn} based on the opinion
1028 * of the <em>MG"A</em> that the day is calculated from dawn to nightfall
1029 * with both being 16.1° below sunrise or sunset. This returns the time
1030 * of 3 {@link #getShaahZmanis16Point1Degrees()} after
1031 * {@link #getAlos16Point1Degrees() dawn}.
1032 *
1033 * @return the <code>Date</code> of the latest zman shema. If the
1034 * calculation can't be computed such as northern and southern
1035 * locations even south of the Arctic Circle and north of the
1036 * Antarctic Circle where the sun may not reach low enough below the
1037 * horizon for this calculation, a null will be returned. See
1038 * detailed explanation on top of the {@link AstronomicalCalendar}
1039 * documentation.
1040 * @see #getShaahZmanis16Point1Degrees()
1041 * @see #getAlos16Point1Degrees()
1042 */
1043 public Date getSofZmanShmaMGA16Point1Degrees() {
1044 return getTimeOffset(getAlos16Point1Degrees(),
1045 getShaahZmanis16Point1Degrees() * 3);
1046 }
1047
1048 /**
1049 * This method returns the latest <em>zman krias shema</em> (time to say
1050 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1051 * <em>alos</em> being {@link #getAlos72() 72} minutes before
1052 * {@link #getSunrise() sunrise}. This time is 3
1053 * <em>{@link #getShaahZmanis72Minutes() shaos zmaniyos}</em> (solar hours)
1054 * after {@link #getAlos72() dawn} based on the opinion of the <em>MG"A</em>
1055 * that the day is calculated from a {@link #getAlos72() dawn} of 72 minutes
1056 * before sunrise to {@link #getTzais72() nightfall} of 72 minutes after
1057 * sunset. This returns the time of 3 * {@link #getShaahZmanis72Minutes()}
1058 * after {@link #getAlos72() dawn}. This class returns an identical time to
1059 * {@link #getSofZmanShmaMGA()} and is repeated here for clarity.
1060 *
1061 * @return the <code>Date</code> of the latest zman shema. If the
1062 * calculation can't be computed such as in the Arctic Circle where
1063 * there is at least one day a year where the sun does not rise, and
1064 * one where it does not set, a null will be returned. See detailed
1065 * explanation on top of the {@link AstronomicalCalendar}
1066 * documentation.
1067 * @see #getShaahZmanis72Minutes()
1068 * @see #getAlos72()
1069 * @see #getSofZmanShmaMGA()
1070 */
1071 public Date getSofZmanShmaMGA72Minutes() {
1072 return getSofZmanShmaMGA();
1073 }
1074
1075 /**
1076 * This method returns the latest <em>zman krias shema</em> (time to say
1077 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1078 * <em>alos</em> being {@link #getAlos72Zmanis() 72} minutes
1079 * <em>zmaniyos</em>, or 1/10th of the day before {@link #getSunrise()
1080 * sunrise}. This time is 3
1081 * <em>{@link #getShaahZmanis90MinutesZmanis() shaos zmaniyos}</em> (solar
1082 * hours) after {@link #getAlos72Zmanis() dawn} based on the opinion of the
1083 * <em>MG"A</em> that the day is calculated from a
1084 * {@link #getAlos72Zmanis() dawn} of 72 minutes <em>zmaniyos</em>, or
1085 * 1/10th of the day before {@link #getSeaLevelSunrise() sea level sunrise}
1086 * to {@link #getTzais72Zmanis() nightfall} of 72 minutes <em>zmaniyos</em>
1087 * after {@link #getSeaLevelSunset() sea level sunset}. This returns the
1088 * time of 3 * {@link #getShaahZmanis72MinutesZmanis()} after
1089 * {@link #getAlos72Zmanis() dawn}.
1090 *
1091 * @return the <code>Date</code> of the latest zman shema. If the
1092 * calculation can't be computed such as in the Arctic Circle where
1093 * there is at least one day a year where the sun does not rise, and
1094 * one where it does not set, a null will be returned. See detailed
1095 * explanation on top of the {@link AstronomicalCalendar}
1096 * documentation.
1097 * @see #getShaahZmanis72MinutesZmanis()
1098 * @see #getAlos72Zmanis()
1099 */
1100 public Date getSofZmanShmaMGA72MinutesZmanis() {
1101 return getTimeOffset(getAlos72Zmanis(),
1102 getShaahZmanis72MinutesZmanis() * 3);
1103 }
1104
1105 /**
1106 * This method returns the latest <em>zman krias shema</em> (time to say
1107 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1108 * <em>alos</em> being {@link #getAlos90() 90} minutes before
1109 * {@link #getSunrise() sunrise}. This time is 3
1110 * <em>{@link #getShaahZmanis90Minutes() shaos zmaniyos}</em> (solar hours)
1111 * after {@link #getAlos90() dawn} based on the opinion of the <em>MG"A</em>
1112 * that the day is calculated from a {@link #getAlos90() dawn} of 90 minutes
1113 * before sunrise to {@link #getTzais90() nightfall} of 90 minutes after
1114 * sunset. This returns the time of 3 * {@link #getShaahZmanis90Minutes()}
1115 * after {@link #getAlos90() dawn}.
1116 *
1117 * @return the <code>Date</code> of the latest zman shema. If the
1118 * calculation can't be computed such as in the Arctic Circle where
1119 * there is at least one day a year where the sun does not rise, and
1120 * one where it does not set, a null will be returned. See detailed
1121 * explanation on top of the {@link AstronomicalCalendar}
1122 * documentation.
1123 * @see #getShaahZmanis90Minutes()
1124 * @see #getAlos90()
1125 */
1126 public Date getSofZmanShmaMGA90Minutes() {
1127 return getTimeOffset(getAlos90(), getShaahZmanis90Minutes() * 3);
1128 }
1129
1130 /**
1131 * This method returns the latest <em>zman krias shema</em> (time to say
1132 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1133 * <em>alos</em> being {@link #getAlos90Zmanis() 90} minutes
1134 * <em>zmaniyos</em> before {@link #getSunrise() sunrise}. This time is 3
1135 * <em>{@link #getShaahZmanis90MinutesZmanis() shaos zmaniyos}</em> (solar
1136 * hours) after {@link #getAlos90Zmanis() dawn} based on the opinion of the
1137 * <em>MG"A</em> that the day is calculated from a
1138 * {@link #getAlos90Zmanis() dawn} of 90 minutes <em>zmaniyos</em> before
1139 * sunrise to {@link #getTzais90Zmanis() nightfall} of 90 minutes
1140 * <em>zmaniyos</em> after sunset. This returns the time of 3 *
1141 * {@link #getShaahZmanis90MinutesZmanis()} after {@link #getAlos90Zmanis()
1142 * dawn}.
1143 *
1144 * @return the <code>Date</code> of the latest zman shema. If the
1145 * calculation can't be computed such as in the Arctic Circle where
1146 * there is at least one day a year where the sun does not rise, and
1147 * one where it does not set, a null will be returned. See detailed
1148 * explanation on top of the {@link AstronomicalCalendar}
1149 * documentation.
1150 * @see #getShaahZmanis90MinutesZmanis()
1151 * @see #getAlos90Zmanis()
1152 */
1153 public Date getSofZmanShmaMGA90MinutesZmanis() {
1154 return getTimeOffset(getAlos90Zmanis(),
1155 getShaahZmanis90MinutesZmanis() * 3);
1156 }
1157
1158 /**
1159 * This method returns the latest <em>zman krias shema</em> (time to say
1160 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1161 * <em>alos</em> being {@link #getAlos96() 96} minutes before
1162 * {@link #getSunrise() sunrise}. This time is 3
1163 * <em>{@link #getShaahZmanis96Minutes() shaos zmaniyos}</em> (solar hours)
1164 * after {@link #getAlos96() dawn} based on the opinion of the <em>MG"A</em>
1165 * that the day is calculated from a {@link #getAlos96() dawn} of 96 minutes
1166 * before sunrise to {@link #getTzais96() nightfall} of 96 minutes after
1167 * sunset. This returns the time of 3 * {@link #getShaahZmanis96Minutes()}
1168 * after {@link #getAlos96() dawn}.
1169 *
1170 * @return the <code>Date</code> of the latest zman shema. If the
1171 * calculation can't be computed such as in the Arctic Circle where
1172 * there is at least one day a year where the sun does not rise, and
1173 * one where it does not set, a null will be returned. See detailed
1174 * explanation on top of the {@link AstronomicalCalendar}
1175 * documentation.
1176 * @see #getShaahZmanis96Minutes()
1177 * @see #getAlos96()
1178 */
1179 public Date getSofZmanShmaMGA96Minutes() {
1180 return getTimeOffset(getAlos96(), getShaahZmanis96Minutes() * 3);
1181 }
1182
1183 /**
1184 * This method returns the latest <em>zman krias shema</em> (time to say
1185 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1186 * <em>alos</em> being {@link #getAlos90Zmanis() 96} minutes
1187 * <em>zmaniyos</em> before {@link #getSunrise() sunrise}. This time is 3
1188 * <em>{@link #getShaahZmanis96MinutesZmanis() shaos zmaniyos}</em> (solar
1189 * hours) after {@link #getAlos96Zmanis() dawn} based on the opinion of the
1190 * <em>MG"A</em> that the day is calculated from a
1191 * {@link #getAlos96Zmanis() dawn} of 96 minutes <em>zmaniyos</em> before
1192 * sunrise to {@link #getTzais90Zmanis() nightfall} of 96 minutes
1193 * <em>zmaniyos</em> after sunset. This returns the time of 3 *
1194 * {@link #getShaahZmanis96MinutesZmanis()} after {@link #getAlos96Zmanis()
1195 * dawn}.
1196 *
1197 * @return the <code>Date</code> of the latest zman shema. If the
1198 * calculation can't be computed such as in the Arctic Circle where
1199 * there is at least one day a year where the sun does not rise, and
1200 * one where it does not set, a null will be returned. See detailed
1201 * explanation on top of the {@link AstronomicalCalendar}
1202 * documentation.
1203 * @see #getShaahZmanis96MinutesZmanis()
1204 * @see #getAlos96Zmanis()
1205 */
1206 public Date getSofZmanShmaMGA96MinutesZmanis() {
1207 return getTimeOffset(getAlos96Zmanis(),
1208 getShaahZmanis96MinutesZmanis() * 3);
1209 }
1210
1211 /**
1212 * This method returns the latest <em>zman krias shema</em> (time to say
1213 * Shema in the morning) calculated as 3 hours (regular and not zmaniyos)
1214 * before {@link ZmanimCalendar#getChatzos()}. This is the opinion of the
1215 * <em>Shach</em> in the
1216 * <em>Nekudas Hakesef (Yora Deah 184), Shevus Yaakov, Chasan Sofer</em> and
1217 * others.This returns the time of 3 hours before
1218 * {@link ZmanimCalendar#getChatzos()}.
1219 *
1220 * @return the <code>Date</code> of the latest zman shema. If the
1221 * calculation can't be computed such as in the Arctic Circle where
1222 * there is at least one day a year where the sun does not rise, and
1223 * one where it does not set, a null will be returned. See detailed
1224 * explanation on top of the {@link AstronomicalCalendar}
1225 * documentation.
1226 * @see ZmanimCalendar#getChatzos()
1227 * @see #getSofZmanTfila2HoursBeforeChatzos()
1228 */
1229 public Date getSofZmanShma3HoursBeforeChatzos() {
1230 return getTimeOffset(getChatzos(), -180 * MINUTE_MILLIS);
1231 }
1232
1233 /**
1234 * This method returns the latest <em>zman krias shema</em> (time to say
1235 * Shema in the morning) in the opinion of the <em>MG"A</em> based on
1236 * <em>alos</em> being {@link #getAlos120() 120} minutes or 1/6th of the day
1237 * before {@link #getSunrise() sunrise}. This time is 3
1238 * <em>{@link #getShaahZmanis120Minutes() shaos zmaniyos}</em> (solar hours)
1239 * after {@link #getAlos120() dawn} based on the opinion of the
1240 * <em>MG"A</em> that the day is calculated from a {@link #getAlos120()
1241 * dawn} of 120 minutes before sunrise to {@link #getTzais120() nightfall}
1242 * of 120 minutes after sunset. This returns the time of 3 *
1243 * {@link #getShaahZmanis120Minutes()} after {@link #getAlos120() dawn}.
1244 *
1245 * @return the <code>Date</code> of the latest zman shema. If the
1246 * calculation can't be computed such as in the Arctic Circle where
1247 * there is at least one day a year where the sun does not rise, and
1248 * one where it does not set, a null will be returned. See detailed
1249 * explanation on top of the {@link AstronomicalCalendar}
1250 * documentation.
1251 * @see #getShaahZmanis120Minutes()
1252 * @see #getAlos120()
1253 */
1254 public Date getSofZmanShmaMGA120Minutes() {
1255 return getTimeOffset(getAlos120(), getShaahZmanis120Minutes() * 3);
1256 }
1257
1258 /**
1259 * This method returns the latest <em>zman krias shema</em> (time to say
1260 * Shema in the morning) based on the opinion that the day starts at
1261 * <em>{@link #getAlos16Point1Degrees() alos 16.1°}</em> and ends at
1262 * {@link #getSeaLevelSunset() sea level sunset}. 3 shaos zmaniyos are
1263 * calculated based on this day and added to
1264 * {@link #getAlos16Point1Degrees() alos}to reach this time. This time is 3
1265 * <em>shaos zmaniyos</em> (solar hours) after
1266 * {@link #getAlos16Point1Degrees() dawn} based on the opinion that the day
1267 * is calculated from a {@link #getAlos16Point1Degrees() alos 16.1°} to
1268 * {@link #getSeaLevelSunset() sea level sunset}.<br />
1269 * <b>Note: </b> Based on this calculation <em>chatzos</em> will not be at
1270 * midday.
1271 *
1272 * @return the <code>Date</code> of the latest zman shema based on this day.
1273 * If the calculation can't be computed such as northern and
1274 * southern locations even south of the Arctic Circle and north of
1275 * the Antarctic Circle where the sun may not reach low enough below
1276 * the horizon for this calculation, a null will be returned. See
1277 * detailed explanation on top of the {@link AstronomicalCalendar}
1278 * documentation.
1279 * @see #getAlos16Point1Degrees()
1280 * @see #getSeaLevelSunset()
1281 */
1282 public Date getSofZmanShmaAlos16Point1ToSunset() {
1283 long shaahZmanis = getTemporalHour(getAlos16Point1Degrees(),
1284 getSeaLevelSunset());
1285 return getTimeOffset(getAlos16Point1Degrees(), shaahZmanis * 3);
1286 }
1287
1288 /**
1289 * This method returns the latest <em>zman krias shema</em> (time to say
1290 * Shema in the morning) based on the opinion that the day starts at
1291 * <em>{@link #getAlos16Point1Degrees() alos 16.1°}</em> and ends at
1292 * {@link #getTzaisGeonim7Point083Degrees() tzais 7.083°}. 3
1293 * <em>shaos zmaniyos</em> are calculated based on this day and added to
1294 * {@link #getAlos16Point1Degrees() alos} to reach this time. This time is 3
1295 * <em>shaos zmaniyos</em> (temporal hours) after
1296 * {@link #getAlos16Point1Degrees() alos 16.1°} based on the opinion
1297 * that the day is calculated from a {@link #getAlos16Point1Degrees() alos
1298 * 16.1°} to
1299 * <em>{@link #getTzaisGeonim7Point083Degrees() tzais 7.083°}</em>.<br />
1300 * <b>Note: </b> Based on this calculation <em>chatzos</em> will not be at
1301 * midday.
1302 *
1303 * @return the <code>Date</code> of the latest zman shema based on this
1304 * calculation. If the calculation can't be computed such as
1305 * northern and southern locations even south of the Arctic Circle
1306 * and north of the Antarctic Circle where the sun may not reach low
1307 * enough below the horizon for this calculation, a null will be
1308 * returned. See detailed explanation on top of the
1309 * {@link AstronomicalCalendar} documentation.
1310 * @see #getAlos16Point1Degrees()
1311 * @see #getTzaisGeonim7Point083Degrees()
1312 */
1313 public Date getSofZmanShmaAlos16Point1ToTzaisGeonim7Point083Degrees() {
1314 long shaahZmanis = getTemporalHour(getAlos16Point1Degrees(),
1315 getTzaisGeonim7Point083Degrees());
1316 return getTimeOffset(getAlos16Point1Degrees(), shaahZmanis * 3);
1317 }
1318
1319 /**
1320 * From the GR"A in Kol Eliyahu on Berachos #173 that states that zman krias
1321 * shema is calculated as half the time from {@link #getSeaLevelSunrise()
1322 * sea level sunset} to fixed local chatzos. The GR"A himself seems to
1323 * contradic this when he stated that zman krias shema is 1/4 of the day
1324 * from sunrise to sunset. See Sarah Lamoed #25 in Yisroel Vehazmanim Vol
1325 * III page 1016.
1326 *
1327 * @return the <code>Date</code> of the latest zman shema based on this
1328 * calculation. If the calculation can't be computed such as in the
1329 * Arctic Circle where there is at least one day a year where the
1330 * sun does not rise, and one where it does not set, a null will be
1331 * returned. See detailed explanation on top of the
1332 * {@link AstronomicalCalendar} documentation.
1333 * @see #getFixedLocalChatzos()
1334 */
1335 public Date getSofZmanShmaKolEliyahu() {
1336 Date chatzos = getFixedLocalChatzos();
1337 if (chatzos == null || getSunrise() == null) {
1338 return null;
1339 }
1340 long diff = (chatzos.getTime() - getSeaLevelSunrise().getTime()) / 2;
1341 return getTimeOffset(chatzos, -diff);
1342 }
1343
1344 /**
1345 * This method returns the latest <em>zman tfila</em> (time to say the
1346 * morning prayers) in the opinion of the <em>MG"A</em> based on
1347 * <em>alos</em> being {@link #getAlos19Point8Degrees()() 19.8°} before
1348 * {@link #getSunrise() sunrise}. This time is 4
1349 * <em>{@link #getShaahZmanis19Point8Degrees() shaos zmaniyos}</em> (solar
1350 * hours) after {@link #getAlos19Point8Degrees() dawn} based on the opinion
1351 * of the <em>MG"A</em> that the day is calculated from dawn to nightfall
1352 * with both being 19.8° below sunrise or sunset. This returns the time
1353 * of 4 {@link #getShaahZmanis19Point8Degrees()} after
1354 * {@link #getAlos19Point8Degrees() dawn}.
1355 *
1356 * @return the <code>Date</code> of the latest zman shema. If the
1357 * calculation can't be computed such as northern and southern
1358 * locations even south of the Arctic Circle and north of the
1359 * Antarctic Circle where the sun may not reach low enough below the
1360 * horizon for this calculation, a null will be returned. See
1361 * detailed explanation on top of the {@link AstronomicalCalendar}
1362 * documentation.
1363 *
1364 * @see #getShaahZmanis19Point8Degrees()
1365 * @see #getAlos19Point8Degrees()
1366 */
1367 public Date getSofZmanTfilaMGA19Point8Degrees() {
1368 return getTimeOffset(getAlos19Point8Degrees(),
1369 getShaahZmanis19Point8Degrees() * 4);
1370 }
1371
1372 /**
1373 * This method returns the latest <em>zman tfila</em> (time to say the
1374 * morning prayers) in the opinion of the <em>MG"A</em> based on
1375 * <em>alos</em> being {@link #getAlos19Point8Degrees()() 16.1°} before
1376 * {@link #getSunrise() sunrise}. This time is 4
1377 * <em>{@link #getShaahZmanis16Point1Degrees() shaos zmaniyos}</em> (solar
1378 * hours) after {@link #getAlos16Point1Degrees() dawn} based on the opinion
1379 * of the <em>MG"A</em> that the day is calculated from dawn to nightfall
1380 * with both being 16.1° below sunrise or sunset. This returns the time
1381 * of 4 {@link #getShaahZmanis16Point1Degrees()} after
1382 * {@link #getAlos16Point1Degrees() dawn}.
1383 *
1384 * @return the <code>Date</code> of the latest zman shema. If the
1385 * calculation can't be computed such as northern and southern
1386 * locations even south of the Arctic Circle and north of the
1387 * Antarctic Circle where the sun may not reach low enough below the
1388 * horizon for this calculation, a null will be returned. See
1389 * detailed explanation on top of the {@link AstronomicalCalendar}
1390 * documentation.
1391 *
1392 * @see #getShaahZmanis16Point1Degrees()
1393 * @see #getAlos16Point1Degrees()
1394 */
1395 public Date getSofZmanTfilaMGA16Point1Degrees() {
1396 return getTimeOffset(getAlos16Point1Degrees(),
1397 getShaahZmanis16Point1Degrees() * 4);
1398 }
1399
1400 /**
1401 * This method returns the latest <em>zman tfila</em> (time to say the
1402 * morning prayers) in the opinion of the <em>MG"A</em> based on
1403 * <em>alos</em> being {@link #getAlos72() 72} minutes before
1404 * {@link #getSunrise() sunrise}. This time is 4
1405 * <em>{@link #getShaahZmanis72Minutes() shaos zmaniyos}</em> (solar hours)
1406 * after {@link #getAlos72() dawn} based on the opinion of the <em>MG"A</em>
1407 * that the day is calculated from a {@link #getAlos72() dawn} of 72 minutes
1408 * before sunrise to {@link #getTzais72() nightfall} of 72 minutes after
1409 * sunset. This returns the time of 4 * {@link #getShaahZmanis72Minutes()}
1410 * after {@link #getAlos72() dawn}. This class returns an identical time to
1411 * {@link #getSofZmanTfilaMGA()} and is repeated here for clarity.
1412 *
1413 * @return the <code>Date</code> of the latest zman tfila. If the
1414 * calculation can't be computed such as in the Arctic Circle where
1415 * there is at least one day a year where the sun does not rise, and
1416 * one where it does not set, a null will be returned. See detailed
1417 * explanation on top of the {@link AstronomicalCalendar}
1418 * documentation.
1419 * @see #getShaahZmanis72Minutes()
1420 * @see #getAlos72()
1421 * @see #getSofZmanShmaMGA()
1422 */
1423 public Date getSofZmanTfilaMGA72Minutes() {
1424 return getSofZmanTfilaMGA();
1425 }
1426
1427 /**
1428 * This method returns the latest <em>zman tfila</em> (time to the morning
1429 * prayers) in the opinion of the <em>MG"A</em> based on <em>alos</em> being
1430 * {@link #getAlos72Zmanis() 72} minutes <em>zmaniyos</em> before
1431 * {@link #getSunrise() sunrise}. This time is 4
1432 * <em>{@link #getShaahZmanis72MinutesZmanis() shaos zmaniyos}</em> (solar
1433 * hours) after {@link #getAlos72Zmanis() dawn} based on the opinion of the
1434 * <em>MG"A</em> that the day is calculated from a
1435 * {@link #getAlos72Zmanis() dawn} of 72 minutes <em>zmaniyos</em> before
1436 * sunrise to {@link #getTzais72Zmanis() nightfall} of 72 minutes
1437 * <em>zmaniyos</em> after sunset. This returns the time of 4 *
1438 * {@link #getShaahZmanis72MinutesZmanis()} after {@link #getAlos72Zmanis()
1439 * dawn}.
1440 *
1441 * @return the <code>Date</code> of the latest zman shema. If the
1442 * calculation can't be computed such as in the Arctic Circle where
1443 * there is at least one day a year where the sun does not rise, and
1444 * one where it does not set, a null will be returned. See detailed
1445 * explanation on top of the {@link AstronomicalCalendar}
1446 * documentation.
1447 * @see #getShaahZmanis72MinutesZmanis()
1448 * @see #getAlos72Zmanis()
1449 */
1450 public Date getSofZmanTfilaMGA72MinutesZmanis() {
1451 return getTimeOffset(getAlos72Zmanis(),
1452 getShaahZmanis72MinutesZmanis() * 4);
1453 }
1454
1455 /**
1456 * This method returns the latest <em>zman tfila</em> (time to say the
1457 * morning prayers) in the opinion of the <em>MG"A</em> based on
1458 * <em>alos</em> being {@link #getAlos90() 90} minutes before
1459 * {@link #getSunrise() sunrise}. This time is 4
1460 * <em>{@link #getShaahZmanis90Minutes() shaos zmaniyos}</em> (solar hours)
1461 * after {@link #getAlos90() dawn} based on the opinion of the <em>MG"A</em>
1462 * that the day is calculated from a {@link #getAlos90() dawn} of 90 minutes
1463 * before sunrise to {@link #getTzais90() nightfall} of 90 minutes after
1464 * sunset. This returns the time of 4 * {@link #getShaahZmanis90Minutes()}
1465 * after {@link #getAlos90() dawn}.
1466 *
1467 * @return the <code>Date</code> of the latest zman tfila. If the
1468 * calculation can't be computed such as in the Arctic Circle where
1469 * there is at least one day a year where the sun does not rise, and
1470 * one where it does not set, a null will be returned. See detailed
1471 * explanation on top of the {@link AstronomicalCalendar}
1472 * documentation.
1473 * @see #getShaahZmanis90Minutes()
1474 * @see #getAlos90()
1475 */
1476 public Date getSofZmanTfilaMGA90Minutes() {
1477 return getTimeOffset(getAlos90(), getShaahZmanis90Minutes() * 4);
1478 }
1479
1480 /**
1481 * This method returns the latest <em>zman tfila</em> (time to the morning
1482 * prayers) in the opinion of the <em>MG"A</em> based on <em>alos</em> being
1483 * {@link #getAlos90Zmanis() 90} minutes <em>zmaniyos</em> before
1484 * {@link #getSunrise() sunrise}. This time is 4
1485 * <em>{@link #getShaahZmanis90MinutesZmanis() shaos zmaniyos}</em> (solar
1486 * hours) after {@link #getAlos90Zmanis() dawn} based on the opinion of the
1487 * <em>MG"A</em> that the day is calculated from a
1488 * {@link #getAlos90Zmanis() dawn} of 90 minutes <em>zmaniyos</em> before
1489 * sunrise to {@link #getTzais90Zmanis() nightfall} of 90 minutes
1490 * <em>zmaniyos</em> after sunset. This returns the time of 4 *
1491 * {@link #getShaahZmanis90MinutesZmanis()} after {@link #getAlos90Zmanis()
1492 * dawn}.
1493 *
1494 * @return the <code>Date</code> of the latest zman shema. If the
1495 * calculation can't be computed such as in the Arctic Circle where
1496 * there is at least one day a year where the sun does not rise, and
1497 * one where it does not set, a null will be returned. See detailed
1498 * explanation on top of the {@link AstronomicalCalendar}
1499 * documentation.
1500 * @see #getShaahZmanis90MinutesZmanis()
1501 * @see #getAlos90Zmanis()
1502 */
1503 public Date getSofZmanTfilaMGA90MinutesZmanis() {
1504 return getTimeOffset(getAlos90Zmanis(),
1505 getShaahZmanis90MinutesZmanis() * 4);
1506 }
1507
1508 /**
1509 * This method returns the latest <em>zman tfila</em> (time to say the
1510 * morning prayers) in the opinion of the <em>MG"A</em> based on
1511 * <em>alos</em> being {@link #getAlos96() 96} minutes before
1512 * {@link #getSunrise() sunrise}. This time is 4
1513 * <em>{@link #getShaahZmanis96Minutes() shaos zmaniyos}</em> (solar hours)
1514 * after {@link #getAlos96() dawn} based on the opinion of the <em>MG"A</em>
1515 * that the day is calculated from a {@link #getAlos96() dawn} of 96 minutes
1516 * before sunrise to {@link #getTzais96() nightfall} of 96 minutes after
1517 * sunset. This returns the time of 4 * {@link #getShaahZmanis96Minutes()}
1518 * after {@link #getAlos96() dawn}.
1519 *
1520 * @return the <code>Date</code> of the latest zman tfila. If the
1521 * calculation can't be computed such as in the Arctic Circle where
1522 * there is at least one day a year where the sun does not rise, and
1523 * one where it does not set, a null will be returned. See detailed
1524 * explanation on top of the {@link AstronomicalCalendar}
1525 * documentation.
1526 * @see #getShaahZmanis96Minutes()
1527 * @see #getAlos96()
1528 */
1529 public Date getSofZmanTfilaMGA96Minutes() {
1530 return getTimeOffset(getAlos96(), getShaahZmanis96Minutes() * 4);
1531 }
1532
1533 /**
1534 * This method returns the latest <em>zman tfila</em> (time to the morning
1535 * prayers) in the opinion of the <em>MG"A</em> based on <em>alos</em> being
1536 * {@link #getAlos96Zmanis() 96} minutes <em>zmaniyos</em> before
1537 * {@link #getSunrise() sunrise}. This time is 4
1538 * <em>{@link #getShaahZmanis96MinutesZmanis() shaos zmaniyos}</em> (solar
1539 * hours) after {@link #getAlos96Zmanis() dawn} based on the opinion of the
1540 * <em>MG"A</em> that the day is calculated from a
1541 * {@link #getAlos96Zmanis() dawn} of 96 minutes <em>zmaniyos</em> before
1542 * sunrise to {@link #getTzais96Zmanis() nightfall} of 96 minutes
1543 * <em>zmaniyos</em> after sunset. This returns the time of 4 *
1544 * {@link #getShaahZmanis96MinutesZmanis()} after {@link #getAlos96Zmanis()
1545 * dawn}.
1546 *
1547 * @return the <code>Date</code> of the latest zman shema. If the
1548 * calculation can't be computed such as in the Arctic Circle where
1549 * there is at least one day a year where the sun does not rise, and
1550 * one where it does not set, a null will be returned. See detailed
1551 * explanation on top of the {@link AstronomicalCalendar}
1552 * documentation.
1553 * @see #getShaahZmanis90MinutesZmanis()
1554 * @see #getAlos90Zmanis()
1555 */
1556 public Date getSofZmanTfilaMGA96MinutesZmanis() {
1557 return getTimeOffset(getAlos96Zmanis(),
1558 getShaahZmanis96MinutesZmanis() * 4);
1559 }
1560
1561 /**
1562 * This method returns the latest <em>zman tfila</em> (time to say the
1563 * morning prayers) in the opinion of the <em>MG"A</em> based on
1564 * <em>alos</em> being {@link #getAlos120() 120} minutes before
1565 * {@link #getSunrise() sunrise}. This time is 4
1566 * <em>{@link #getShaahZmanis120Minutes() shaos zmaniyos}</em> (solar hours)
1567 * after {@link #getAlos120() dawn} based on the opinion of the
1568 * <em>MG"A</em> that the day is calculated from a {@link #getAlos120()
1569 * dawn} of 120 minutes before sunrise to {@link #getTzais120() nightfall}
1570 * of 120 minutes after sunset. This returns the time of 4 *
1571 * {@link #getShaahZmanis120Minutes()} after {@link #getAlos120() dawn}.
1572 *
1573 * @return the <code>Date</code> of the latest zman shema. If the
1574 * calculation can't be computed such as in the Arctic Circle where
1575 * there is at least one day a year where the sun does not rise, and
1576 * one where it does not set, a null will be returned. See detailed
1577 * explanation on top of the {@link AstronomicalCalendar}
1578 * documentation.
1579 * @see #getShaahZmanis120Minutes()
1580 * @see #getAlos120()
1581 */
1582 public Date getSofZmanTfilaMGA120Minutes() {
1583 return getTimeOffset(getAlos120(), getShaahZmanis120Minutes() * 4);
1584 }
1585
1586 /**
1587 * This method returns the latest <em>zman tfila</em> (time to say the
1588 * morning prayers) calculated as 2 hours befor
1589 * {@link ZmanimCalendar#getChatzos()}. This is based on the opinions that
1590 * calculate <em>sof zman krias shema</em> as
1591 * {@link #getSofZmanShma3HoursBeforeChatzos()}. This returns the time of 2
1592 * hours before {@link ZmanimCalendar#getChatzos()}.
1593 *
1594 * @return the <code>Date</code> of the latest zman shema. If the
1595 * calculation can't be computed such as in the Arctic Circle where
1596 * there is at least one day a year where the sun does not rise, and
1597 * one where it does not set, a null will be returned. See detailed
1598 * explanation on top of the {@link AstronomicalCalendar}
1599 * documentation.
1600 * @see ZmanimCalendar#getChatzos()
1601 * @see #getSofZmanShma3HoursBeforeChatzos()
1602 */
1603 public Date getSofZmanTfila2HoursBeforeChatzos() {
1604 return getTimeOffset(getChatzos(), -120 * MINUTE_MILLIS);
1605 }
1606
1607 /**
1608 * This method returns mincha gedola calculated as 30 minutes after
1609 * <em>{@link #getChatzos() chatzos}</em> and not 1/2 of a
1610 * <em>{@link #getShaahZmanisGra() shaah zmanis}</em> after
1611 * <em>{@link #getChatzos() chatzos}</em> as calculated by
1612 * {@link #getMinchaGedola}. Some use this time to delay the start of mincha
1613 * in the winter when 1/2 of a
1614 * <em>{@link #getShaahZmanisGra() shaah zmanis}</em> is less than 30
1615 * minutes. See {@link #getMinchaGedolaGreaterThan30()}for a conveniance
1616 * method that returns the later of the 2 calculations. One should not use
1617 * this time to start <em>mincha</em> before the standard
1618 * <em>{@link #getMinchaGedola() mincha gedola}</em>. See <em>Shulchan Aruch
1619 * Orach Chayim Siman Raish Lamed Gimel seif alef</em> and the
1620 * <em>Shaar Hatziyon seif katan ches</em>.
1621 *
1622 * @return the <code>Date</code> of 30 mintes after <em>chatzos</em>. If the
1623 * calculation can't be computed such as in the Arctic Circle where
1624 * there is at least one day a year where the sun does not rise, and
1625 * one where it does not set, a null will be returned. See detailed
1626 * explanation on top of the {@link AstronomicalCalendar}
1627 * documentation.
1628 * @see #getMinchaGedola()
1629 * @see #getMinchaGedolaGreaterThan30()
1630 */
1631 public Date getMinchaGedola30Minutes() {
1632 return getTimeOffset(getChatzos(), MINUTE_MILLIS * 30);
1633 }
1634
1635 /**
1636 * This method returns the time of <em>mincha gedola</em> according to the
1637 * Magen Avraham with the day starting 72 minutes before sunrise and ending
1638 * 72 minutes after sunset. This is the earliest time to pray
1639 * <em>mincha</em>. For more information on this see the documentation on
1640 * <em>{@link #getMinchaGedola() mincha gedola}</em>. This is calculated as
1641 * 6.5 {@link #getTemporalHour() solar hours} after alos. The calculation
1642 * used is 6.5 * {@link #getShaahZmanis72Minutes()} after
1643 * {@link #getAlos72() alos}.
1644 *
1645 * @see #getAlos72()()
1646 * @see #getMinchaGedola()
1647 * @see #getMinchaKetana()
1648 * @see ZmanimCalendar#getMinchaGedola()
1649 * @return the <code>Date</code> of the time of mincha gedola. If the
1650 * calculation can't be computed such as in the Arctic Circle where
1651 * there is at least one day a year where the sun does not rise, and
1652 * one where it does not set, a null will be returned. See detailed
1653 * explanation on top of the {@link AstronomicalCalendar}
1654 * documentation.
1655 */
1656 public Date getMinchaGedola72Minutes() {
1657 return getTimeOffset(getAlos72(), getShaahZmanis72Minutes() * 6.5);
1658 }
1659
1660 /**
1661 * This method returns the time of <em>mincha gedola</em> according to the
1662 * Magen Avraham with the day starting and ending 16.1° below the
1663 * horizon. This is the earliest time to pray <em>mincha</em>. For more
1664 * information on this see the documentation on
1665 * <em>{@link #getMinchaGedola() mincha gedola}</em>. This is calculated as
1666 * 6.5 {@link #getTemporalHour() solar hours} after alos. The calculation
1667 * used is 6.5 * {@link #getShaahZmanis16Point1Degrees()} after
1668 * {@link #getAlos16Point1Degrees() alos}.
1669 *
1670 * @see #getShaahZmanis16Point1Degrees()
1671 * @see #getMinchaGedola()
1672 * @see #getMinchaKetana()
1673 * @return the <code>Date</code> of the time of mincha gedola. If the
1674 * calculation can't be computed such as northern and southern
1675 * locations even south of the Arctic Circle and north of the
1676 * Antarctic Circle where the sun may not reach low enough below the
1677 * horizon for this calculation, a null will be returned. See
1678 * detailed explanation on top of the {@link AstronomicalCalendar}
1679 * documentation.
1680 */
1681 public Date getMinchaGedola16Point1Degrees() {
1682 return getTimeOffset(getAlos16Point1Degrees(),
1683 getShaahZmanis16Point1Degrees() * 6.5);
1684 }
1685
1686 /**
1687 * This is a conveniance methd that returns the later of
1688 * {@link #getMinchaGedola()} and {@link #getMinchaGedola30Minutes()}. In
1689 * the winter when a <em>{@link #getShaahZmanisGra() shaah zmanis}</em> is
1690 * less than 30 minutes {@link #getMinchaGedola30Minutes()} will be
1691 * returned, otherwise {@link #getMinchaGedola()} will be returned.
1692 *
1693 * @return the <code>Date</code> of the later of {@link #getMinchaGedola()}
1694 * and {@link #getMinchaGedola30Minutes()}. If the calculation can't
1695 * be computed such as in the Arctic Circle where there is at least
1696 * one day a year where the sun does not rise, and one where it does
1697 * not set, a null will be returned. See detailed explanation on top
1698 * of the {@link AstronomicalCalendar} documentation.
1699 */
1700 public Date getMinchaGedolaGreaterThan30() {
1701 if (getMinchaGedola30Minutes() == null || getMinchaGedola() == null) {
1702 return null;
1703 } else {
1704 return getMinchaGedola30Minutes().compareTo(getMinchaGedola()) > 0 ? getMinchaGedola30Minutes()
1705 : getMinchaGedola();
1706 }
1707 }
1708
1709 /**
1710 * This method returns the time of <em>mincha ketana</em> according to the
1711 * Magen Avraham with the day starting and ending 16.1° below the
1712 * horizon. This is the perfered earliest time to pray <em>mincha</em> in
1713 * the opinion of the Ramba"m and others. For more information on this see
1714 * the documentation on <em>{@link #getMinchaGedola() mincha gedola}</em>.
1715 * This is calculated as 9.5 {@link #getTemporalHour() solar hours} after
1716 * alos. The calculation used is 9.5 *
1717 * {@link #getShaahZmanis16Point1Degrees()} after
1718 * {@link #getAlos16Point1Degrees() alos}.
1719 *
1720 * @see #getShaahZmanis16Point1Degrees()
1721 * @see #getMinchaGedola()
1722 * @see #getMinchaKetana()
1723 * @return the <code>Date</code> of the time of mincha ketana. If the
1724 * calculation can't be computed such as northern and southern
1725 * locations even south of the Arctic Circle and north of the
1726 * Antarctic Circle where the sun may not reach low enough below the
1727 * horizon for this calculation, a null will be returned. See
1728 * detailed explanation on top of the {@link AstronomicalCalendar}
1729 * documentation.
1730 */
1731 public Date getMinchaKetana16Point1Degrees() {
1732 return getTimeOffset(getAlos16Point1Degrees(),
1733 getShaahZmanis16Point1Degrees() * 9.5);
1734 }
1735
1736 /**
1737 * This method returns the time of <em>mincha ketana</em> according to the
1738 * Magen Avraham with the day starting 72 minutes before sunrise and ending
1739 * 72 minutes after sunset. This is the perfered earliest time to pray
1740 * <em>mincha</em> in the opinion of the Ramba"m and others. For more
1741 * information on this see the documentation on
1742 * <em>{@link #getMinchaGedola() mincha gedola}</em>. This is calculated as
1743 * 9.5 {@link #getShaahZmanis72Minutes()} after alos. The calculation used
1744 * is 9.5 * {@link #getShaahZmanis72Minutes()} after {@link #getAlos72()
1745 * alos}.
1746 *
1747 * @see #getShaahZmanis16Point1Degrees()
1748 * @see #getMinchaGedola()
1749 * @see #getMinchaKetana()
1750 * @return the <code>Date</code> of the time of mincha ketana. If the
1751 * calculation can't be computed such as in the Arctic Circle where
1752 * there is at least one day a year where the sun does not rise, and
1753 * one where it does not set, a null will be returned. See detailed
1754 * explanation on top of the {@link AstronomicalCalendar}
1755 * documentation.
1756 */
1757 public Date getMinchaKetana72Minutes() {
1758 return getTimeOffset(getAlos72(), getShaahZmanis72Minutes() * 9.5);
1759 }
1760
1761 /**
1762 * This method returns the time of <em>plag hamincha</em>. This is
1763 * calculated as 10.75 hours after {@link #getAlos60() dawn}. The formula
1764 * used is:<br/>
1765 * 10.75 {@link #getShaahZmanis60Minutes()} after {@link #getAlos60()}.
1766 *
1767 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1768 * the calculation can't be computed such as in the Arctic Circle
1769 * where there is at least one day a year where the sun does not
1770 * rise, and one where it does not set, a null will be returned. See
1771 * detailed explanation on top of the {@link AstronomicalCalendar}
1772 * documentation.
1773 */
1774 public Date getPlagHamincha60Minutes() {
1775 return getTimeOffset(getAlos60(), getShaahZmanis60Minutes() * 10.75);
1776 }
1777
1778 /**
1779 * This method returns the time of <em>plag hamincha</em>. This is
1780 * calculated as 10.75 hours after {@link #getAlos72() dawn}. The formula
1781 * used is:<br/>
1782 * 10.75 {@link #getShaahZmanis72Minutes()} after {@link #getAlos72()}.
1783 *
1784 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1785 * the calculation can't be computed such as in the Arctic Circle
1786 * where there is at least one day a year where the sun does not
1787 * rise, and one where it does not set, a null will be returned. See
1788 * detailed explanation on top of the {@link AstronomicalCalendar}
1789 * documentation.
1790 */
1791 public Date getPlagHamincha72Minutes() {
1792 return getTimeOffset(getAlos72(), getShaahZmanis72Minutes() * 10.75);
1793 }
1794
1795 /**
1796 * This method returns the time of <em>plag hamincha</em>. This is
1797 * calculated as 10.75 hours after {@link #getAlos90() dawn}. The formula
1798 * used is:<br/>
1799 * 10.75 {@link #getShaahZmanis90Minutes()} after {@link #getAlos90()}.
1800 *
1801 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1802 * the calculation can't be computed such as in the Arctic Circle
1803 * where there is at least one day a year where the sun does not
1804 * rise, and one where it does not set, a null will be returned. See
1805 * detailed explanation on top of the {@link AstronomicalCalendar}
1806 * documentation.
1807 */
1808 public Date getPlagHamincha90Minutes() {
1809 return getTimeOffset(getAlos90(), getShaahZmanis90Minutes() * 10.75);
1810 }
1811
1812 /**
1813 * This method returns the time of <em>plag hamincha</em>. This is
1814 * calculated as 10.75 hours after {@link #getAlos96() dawn}. The formula
1815 * used is:<br/>
1816 * 10.75 {@link #getShaahZmanis96Minutes()} after {@link #getAlos96()}.
1817 *
1818 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1819 * the calculation can't be computed such as in the Arctic Circle
1820 * where there is at least one day a year where the sun does not
1821 * rise, and one where it does not set, a null will be returned. See
1822 * detailed explanation on top of the {@link AstronomicalCalendar}
1823 * documentation.
1824 */
1825 public Date getPlagHamincha96Minutes() {
1826 return getTimeOffset(getAlos96(), getShaahZmanis96Minutes() * 10.75);
1827 }
1828
1829 /**
1830 * This method returns the time of <em>plag hamincha</em>. This is
1831 * calculated as 10.75 hours after {@link #getAlos96Zmanis() dawn}. The
1832 * formula used is:<br/>
1833 * 10.75 * {@link #getShaahZmanis96MinutesZmanis()} after
1834 * {@link #getAlos96Zmanis() dawn}.
1835 *
1836 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1837 * the calculation can't be computed such as in the Arctic Circle
1838 * where there is at least one day a year where the sun does not
1839 * rise, and one where it does not set, a null will be returned. See
1840 * detailed explanation on top of the {@link AstronomicalCalendar}
1841 * documentation.
1842 */
1843 public Date getPlagHamincha96MinutesZmanis() {
1844 return getTimeOffset(getAlos96Zmanis(),
1845 getShaahZmanis96MinutesZmanis() * 10.75);
1846 }
1847
1848 /**
1849 * This method returns the time of <em>plag hamincha</em>. This is
1850 * calculated as 10.75 hours after {@link #getAlos90Zmanis() dawn}. The
1851 * formula used is:<br/>
1852 * 10.75 * {@link #getShaahZmanis90MinutesZmanis()} after
1853 * {@link #getAlos90Zmanis() dawn}.
1854 *
1855 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1856 * the calculation can't be computed such as in the Arctic Circle
1857 * where there is at least one day a year where the sun does not
1858 * rise, and one where it does not set, a null will be returned. See
1859 * detailed explanation on top of the {@link AstronomicalCalendar}
1860 * documentation.
1861 */
1862 public Date getPlagHamincha90MinutesZmanis() {
1863 return getTimeOffset(getAlos90Zmanis(),
1864 getShaahZmanis90MinutesZmanis() * 10.75);
1865 }
1866
1867 /**
1868 * This method returns the time of <em>plag hamincha</em>. This is
1869 * calculated as 10.75 hours after {@link #getAlos72Zmanis() dawn}. The
1870 * formula used is:<br/>
1871 * 10.75 * {@link #getShaahZmanis72MinutesZmanis()} after
1872 * {@link #getAlos72Zmanis() dawn}.
1873 *
1874 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1875 * the calculation can't be computed such as in the Arctic Circle
1876 * where there is at least one day a year where the sun does not
1877 * rise, and one where it does not set, a null will be returned. See
1878 * detailed explanation on top of the {@link AstronomicalCalendar}
1879 * documentation.
1880 */
1881 public Date getPlagHamincha72MinutesZmanis() {
1882 return getTimeOffset(getAlos72Zmanis(),
1883 getShaahZmanis72MinutesZmanis() * 10.75);
1884 }
1885
1886 /**
1887 * This method returns the time of <em>plag hamincha</em> based on the
1888 * opinion that the day starts at
1889 * <em>{@link #getAlos16Point1Degrees() alos 16.1°}</em> and ends at
1890 * <em>{@link #getTzais16Point1Degrees() tzais 16.1°}</em>. This is
1891 * calculated as 10.75 hours <em>zmaniyos</em> after
1892 * {@link #getAlos16Point1Degrees() dawn}. The formula is<br/>
1893 * 10.75 * {@link #getShaahZmanis16Point1Degrees()} after
1894 * {@link #getAlos16Point1Degrees()}.
1895 *
1896 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1897 * the calculation can't be computed such as northern and southern
1898 * locations even south of the Arctic Circle and north of the
1899 * Antarctic Circle where the sun may not reach low enough below the
1900 * horizon for this calculation, a null will be returned. See
1901 * detailed explanation on top of the {@link AstronomicalCalendar}
1902 * documentation.
1903 */
1904 public Date getPlagHamincha16Point1Degrees() {
1905 return getTimeOffset(getAlos16Point1Degrees(),
1906 getShaahZmanis16Point1Degrees() * 10.75);
1907 }
1908
1909 /**
1910 * This method returns the time of <em>plag hamincha</em> based on the
1911 * opinion that the day starts at
1912 * <em>{@link #getAlos19Point8Degrees() alos 19.8°}</em> and ends at
1913 * <em>{@link #getTzais19Point8Degrees() tzais 19.8°}</em>. This is
1914 * calculated as 10.75 hours <em>zmaniyos</em> after
1915 * {@link #getAlos19Point8Degrees() dawn}. The formula is<br/>
1916 * 10.75 * {@link #getShaahZmanis19Point8Degrees()} after
1917 * {@link #getAlos19Point8Degrees()}.
1918 *
1919 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1920 * the calculation can't be computed such as northern and southern
1921 * locations even south of the Arctic Circle and north of the
1922 * Antarctic Circle where the sun may not reach low enough below the
1923 * horizon for this calculation, a null will be returned. See
1924 * detailed explanation on top of the {@link AstronomicalCalendar}
1925 * documentation.
1926 */
1927 public Date getPlagHamincha19Point8Degrees() {
1928 return getTimeOffset(getAlos19Point8Degrees(),
1929 getShaahZmanis19Point8Degrees() * 10.75);
1930 }
1931
1932 /**
1933 * This method returns the time of <em>plag hamincha</em> based on the
1934 * opinion that the day starts at
1935 * <em>{@link #getAlos26Degrees() alos 26°}</em> and ends at
1936 * <em>{@link #getTzais26Degrees() tzais 26°}</em>. This is calculated
1937 * as 10.75 hours <em>zmaniyos</em> after {@link #getAlos26Degrees() dawn}.
1938 * The formula is<br/>
1939 * 10.75 * {@link #getShaahZmanis26Degrees()} after
1940 * {@link #getAlos26Degrees()}.
1941 *
1942 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1943 * the calculation can't be computed such as northern and southern
1944 * locations even south of the Arctic Circle and north of the
1945 * Antarctic Circle where the sun may not reach low enough below the
1946 * horizon for this calculation, a null will be returned. See
1947 * detailed explanation on top of the {@link AstronomicalCalendar}
1948 * documentation.
1949 */
1950 public Date getPlagHamincha26Degrees() {
1951 return getTimeOffset(getAlos26Degrees(),
1952 getShaahZmanis26Degrees() * 10.75);
1953 }
1954
1955 /**
1956 * This method returns the time of <em>plag hamincha</em> based on the
1957 * opinion that the day starts at
1958 * <em>{@link #getAlos18Degrees() alos 18°}</em> and ends at
1959 * <em>{@link #getTzais18Degrees() tzais 18°}</em>. This is calculated
1960 * as 10.75 hours <em>zmaniyos</em> after {@link #getAlos18Degrees() dawn}.
1961 * The formula is<br/>
1962 * 10.75 * {@link #getShaahZmanis18Degrees()} after
1963 * {@link #getAlos18Degrees()}.
1964 *
1965 * @return the <code>Date</code> of the time of <em>plag hamincha</em>. If
1966 * the calculation can't be computed such as northern and southern
1967 * locations even south of the Arctic Circle and north of the
1968 * Antarctic Circle where the sun may not reach low enough below the
1969 * horizon for this calculation, a null will be returned. See
1970 * detailed explanation on top of the {@link AstronomicalCalendar}
1971 * documentation.
1972 */
1973 public Date getPlagHamincha18Degrees() {
1974 return getTimeOffset(getAlos18Degrees(),
1975 getShaahZmanis18Degrees() * 10.75);
1976 }
1977
1978 /**
1979 * This method returns the time of <em>plag hamincha</em> based on the
1980 * opinion that the day starts at
1981 * <em>{@link #getAlos16Point1Degrees() alos 16.1°}</em> and ends at
1982 * {@link #getSunset() sunset}. 10.75 shaos zmaniyos are calculated based on
1983 * this day and added to {@link #getAlos16Point1Degrees() alos} to reach
1984 * this time. This time is 10.75 <em>shaos zmaniyos</em> (temporal hours)
1985 * after {@link #getAlos16Point1Degrees() dawn} based on the opinion that
1986 * the day is calculated from a {@link #getAlos16Point1Degrees() dawn} of
1987 * 16.1 degrees before sunrise to {@link #getSeaLevelSunset() sea level
1988 * sunset}. This returns the time of 10.75 * the calculated
1989 * <em>shaah zmanis</em> after {@link #getAlos16Point1Degrees() dawn}.
1990 *
1991 * @return the <code>Date</code> of the plag. If the calculation can't be
1992 * computed such as northern and southern locations even south of
1993 * the Arctic Circle and north of the Antarctic Circle where the sun
1994 * may not reach low enough below the horizon for this calculation,
1995 * a null will be returned. See detailed explanation on top of the
1996 * {@link AstronomicalCalendar} documentation.
1997 * @see #getAlos16Point1Degrees()
1998 * @see #getSeaLevelSunset()
1999 */
2000 public Date getPlagAlosToSunset() {
2001 long shaahZmanis = getTemporalHour(getAlos16Point1Degrees(),
2002 getSeaLevelSunset());
2003 return getTimeOffset(getAlos16Point1Degrees(), shaahZmanis * 10.75);
2004 }
2005
2006 /**
2007 * This method returns the time of <em>plag hamincha</em> based on the
2008 * opinion that the day starts at
2009 * <em>{@link #getAlos16Point1Degrees() alos 16.1°}</em> and ends at
2010 * {@link #getTzaisGeonim7Point083Degrees() tzais}. 10.75 shaos zmaniyos are
2011 * calculated based on this day and added to
2012 * {@link #getAlos16Point1Degrees() alos} to reach this time. This time is
2013 * 10.75 <em>shaos zmaniyos</em> (temporal hours) after
2014 * {@link #getAlos16Point1Degrees() dawn} based on the opinion that the day
2015 * is calculated from a {@link #getAlos16Point1Degrees() dawn} of 16.1
2016 * degrees before sunrise to {@link #getTzaisGeonim7Point083Degrees() tzais}
2017 * . This returns the time of 10.75 * the calculated <em>shaah zmanis</em>
2018 * after {@link #getAlos16Point1Degrees() dawn}.
2019 *
2020 * @return the <code>Date</code> of the plag. If the calculation can't be
2021 * computed such as northern and southern locations even south of
2022 * the Arctic Circle and north of the Antarctic Circle where the sun
2023 * may not reach low enough below the horizon for this calculation,
2024 * a null will be returned. See detailed explanation on top of the
2025 * {@link AstronomicalCalendar} documentation.
2026 * @see #getAlos16Point1Degrees()
2027 * @see #getTzaisGeonim7Point083Degrees()
2028 */
2029 public Date getPlagAlos16Point1ToTzaisGeonim7Point083Degrees() {
2030 long shaahZmanis = getTemporalHour(getAlos16Point1Degrees(),
2031 getTzaisGeonim7Point083Degrees());
2032 return getTimeOffset(getAlos16Point1Degrees(), shaahZmanis * 10.75);
2033 }
2034
2035 /**
2036 * This method returns Bain Hashmashos of Rabainu Tam calculated as the time
2037 * the sun is 13° below {@link #GEOMETRIC_ZENITH geometric zenith}
2038 * (90°). <br/>
2039 * <br/>
2040 * <b>FIXME:</b> As per Yisroel Vehazmanim Vol III page 1028 No 50, the
2041 * 13° is slightly inaccurate. He lists it as a drop less than 13°.
2042 * Calculations show that is seems to be 13.2477° below the horizon at
2043 * that time. This makes a difference of 1 minute and 10 seconds in
2044 * Jerusalem in the Equinox, and 1 minute 29 seconds in the solstice. for NY
2045 * in the solstice, the difference is 1 minute 56 seconds.
2046 *
2047 * @return the <code>Date</code> of the sun being 13° below
2048 * {@link #GEOMETRIC_ZENITH geometric zenith} (90°). If the
2049 * calculation can't be computed such as northern and southern
2050 * locations even south of the Arctic Circle and north of the
2051 * Antarctic Circle where the sun may not reach low enough below the
2052 * horizon for this calculation, a null will be returned. See
2053 * detailed explanation on top of the {@link AstronomicalCalendar}
2054 * documentation.
2055 * @see #ZENITH_13_DEGREES
2056 *
2057 */
2058 public Date getBainHasmashosRT13Degrees() {
2059 return getSunsetOffsetByDegrees(ZENITH_13_DEGREES);
2060 }
2061
2062 /**
2063 * This method returns Bain Hashmashos of Rabainu Tam calculated as a 58.5
2064 * minute offset after sunset. Bain hashmashos is 3/4 of a mil before tzais
2065 * or 3 1/4 mil after sunset. With a mil calculated as 18 minutes, 3.25 * 18
2066 * = 58.5 minutes.
2067 *
2068 * @return the <code>Date</code> of 58.5 minutes after sunset. If the
2069 * calculation can't be computed such as in the Arctic Circle where
2070 * there is at least one day a year where the sun does not rise, and
2071 * one where it does not set, a null will be returned. See detailed
2072 * explanation on top of the {@link AstronomicalCalendar}
2073 * documentation.
2074 *
2075 */
2076 public Date getBainHasmashosRT58Point5Minutes() {
2077 return getTimeOffset(getSeaLevelSunset(), 58.5 * MINUTE_MILLIS);
2078 }
2079
2080 /**
2081 * This method returns the time of <em>bain hashmashos</em> based on the
2082 * calculation of 13.5 minutes (3/4 of an 18 minute mil before shkiah
2083 * calculated as {@link #getTzaisGeonim7Point083Degrees() 7.083°}.
2084 *
2085 * @return the <code>Date</code> of the bain hashmashos of Rabainu Tam in
2086 * this calculation. If the calculation can't be computed such as
2087 * northern and southern locations even south of the Arctic Circle
2088 * and north of the Antarctic Circle where the sun may not reach low
2089 * enough below the horizon for this calculation, a null will be
2090 * returned. See detailed explanation on top of the
2091 * {@link AstronomicalCalendar} documentation.
2092 * @see #getTzaisGeonim7Point083Degrees()
2093 */
2094 public Date getBainHasmashosRT13Point5MinutesBefore7Point083Degrees() {
2095 return getTimeOffset(getSunsetOffsetByDegrees(ZENITH_7_POINT_083),
2096 -13.5 * MINUTE_MILLIS);
2097 }
2098
2099 /**
2100 * This method returns <em>bain hashmashos</em> of Rabainu Tam calculated in
2101 * the opinion of the Divray Yosef (see Yisrael Vehazmanim) calculated
2102 * 5/18th (27.77%) of the time between alos (calculated as 19.8° before
2103 * sunrise) and sunrise. This is added to sunset to arrive at the time for
2104 * bain hashmashos of Rabainu Tam).
2105 *
2106 * @return the <code>Date</code> of bain hashmashos of Rabainu Tam for this
2107 * calculation. If the calculation can't be computed such as
2108 * northern and southern locations even south of the Arctic Circle
2109 * and north of the Antarctic Circle where the sun may not reach low
2110 * enough below the horizon for this calculation, a null will be
2111 * returned. See detailed explanation on top of the
2112 * {@link AstronomicalCalendar} documentation.
2113 */
2114 public Date getBainHasmashosRT2Stars() {
2115 Date alos19Point8 = getAlos19Point8Degrees();
2116 Date sunrise = getSeaLevelSunrise();
2117 if (alos19Point8 == null || sunrise == null) {
2118 return null;
2119 }
2120 return getTimeOffset(getSeaLevelSunset(),
2121 (sunrise.getTime() - alos19Point8.getTime()) * (5 / 18d));
2122 }
2123
2124 /**
2125 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2126 * of the <em>Geonim</em> calculated at the sun's position at
2127 * {@link #ZENITH_5_POINT_95 5.95°} below the western horizon.
2128 *
2129 * @return the <code>Date</code> representing the time when the sun is
2130 * 5.95° below sea level.
2131 * @see #ZENITH_5_POINT_95
2132 */
2133 // public Date getTzaisGeonim3Point7Degrees() {
2134 // return getSunsetOffsetByDegrees(ZENITH_3_POINT_7);
2135 // }
2136 /**
2137 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2138 * of the <em>Geonim</em> calculated at the sun's position at
2139 * {@link #ZENITH_5_POINT_95 5.95°} below the western horizon.
2140 *
2141 * @return the <code>Date</code> representing the time when the sun is
2142 * 5.95° below sea level. If the calculation can't be computed
2143 * such as northern and southern locations even south of the Arctic
2144 * Circle and north of the Antarctic Circle where the sun may not
2145 * reach low enough below the horizon for this calculation, a null
2146 * will be returned. See detailed explanation on top of the
2147 * {@link AstronomicalCalendar} documentation.
2148 * @see #ZENITH_5_POINT_95
2149 */
2150 public Date getTzaisGeonim5Point95Degrees() {
2151 return getSunsetOffsetByDegrees(ZENITH_5_POINT_95);
2152 }
2153
2154 /**
2155 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2156 * of the <em>Geonim</em> calculated calculated as 3/4 of a <a href=
2157 * "http://en.wikipedia.org/wiki/Biblical_and_Talmudic_units_of_measurement"
2158 * >Mil</a> based on an 18 minute Mil, or 13.5 minutes. It is the sun's
2159 * position at {@link #ZENITH_3_POINT_65 3.65°} below the western
2160 * horizon. This is a very early zman and should not be relied on without
2161 * Rabbinical guidance.
2162 *
2163 * @return the <code>Date</code> representing the time when the sun is
2164 * 3.65° below sea level. If the calculation can't be computed
2165 * such as northern and southern locations even south of the Arctic
2166 * Circle and north of the Antarctic Circle where the sun may not
2167 * reach low enough below the horizon for this calculation, a null
2168 * will be returned. See detailed explanation on top of the
2169 * {@link AstronomicalCalendar} documentation.
2170 * @see #ZENITH_3_POINT_65
2171 */
2172 public Date getTzaisGeonim3Point65Degrees() {
2173 return getSunsetOffsetByDegrees(ComplexZmanimCalendar.ZENITH_3_POINT_65);
2174 }
2175
2176 /**
2177 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2178 * of the <em>Geonim</em> calculated as 3/4 of a <a href=
2179 * "http://en.wikipedia.org/wiki/Biblical_and_Talmudic_units_of_measurement"
2180 * >Mil</a> based on a 24 minute Mil, or 18 minutes. It is the sun's
2181 * position at {@link #ZENITH_4_POINT_61 4.61°} below the western
2182 * horizon. This is a very early zman and should not be relied on without
2183 * Rabbinical guidance.
2184 *
2185 * @return the <code>Date</code> representing the time when the sun is
2186 * 4.61° below sea level. If the calculation can't be computed
2187 * such as northern and southern locations even south of the Arctic
2188 * Circle and north of the Antarctic Circle where the sun may not
2189 * reach low enough below the horizon for this calculation, a null
2190 * will be returned. See detailed explanation on top of the
2191 * {@link AstronomicalCalendar} documentation.
2192 * @see #ZENITH_4_POINT_61
2193 */
2194 public Date getTzaisGeonim4Point61Degrees() {
2195 return getSunsetOffsetByDegrees(ComplexZmanimCalendar.ZENITH_4_POINT_61);
2196 }
2197
2198 /**
2199 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2200 * of the <em>Geonim</em> calculated as 3/4 of a <a href=
2201 * "http://en.wikipedia.org/wiki/Biblical_and_Talmudic_units_of_measurement"
2202 * >Mil</a>, based on a 22.5 minute Mil, or 16 7/8 minutes. It is the sun's
2203 * position at {@link #ZENITH_4_POINT_37 4.37°} below the western
2204 * horizon. This is a very early zman and should not be relied on without
2205 * Rabbinical guidance.
2206 *
2207 * @return the <code>Date</code> representing the time when the sun is
2208 * 4.37° below sea level. If the calculation can't be computed
2209 * such as northern and southern locations even south of the Arctic
2210 * Circle and north of the Antarctic Circle where the sun may not
2211 * reach low enough below the horizon for this calculation, a null
2212 * will be returned. See detailed explanation on top of the
2213 * {@link AstronomicalCalendar} documentation.
2214 * @see #ZENITH_4_POINT_37
2215 */
2216 public Date getTzaisGeonim4Point37Degrees() {
2217 return getSunsetOffsetByDegrees(ComplexZmanimCalendar.ZENITH_4_POINT_37);
2218 }
2219
2220 /**
2221 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2222 * of the <em>Geonim</em> calculated as 3/4 of a <a href=
2223 * "http://en.wikipedia.org/wiki/Biblical_and_Talmudic_units_of_measurement"
2224 * >Mil</a>. It is based on the Baal Hatanya based on a Mil being 24
2225 * minutes, and is calculated as 18 +2 + 4 for a total of 24 minutes (FIXME:
2226 * additional details needed). It is the sun's position at
2227 * {@link #ZENITH_5_POINT_88 5.88°} below the western horizon. This is a
2228 * very early zman and should not be relied on without Rabbinical guidance.
2229 *
2230 * @return the <code>Date</code> representing the time when the sun is
2231 * 5.88° below sea level. If the calculation can't be computed
2232 * such as northern and southern locations even south of the Arctic
2233 * Circle and north of the Antarctic Circle where the sun may not
2234 * reach low enough below the horizon for this calculation, a null
2235 * will be returned. See detailed explanation on top of the
2236 * {@link AstronomicalCalendar} documentation.
2237 * @see #ZENITH_5_POINT_88
2238 */
2239 public Date getTzaisGeonim5Point88Degrees() {
2240 return getSunsetOffsetByDegrees(ComplexZmanimCalendar.ZENITH_5_POINT_88);
2241 }
2242
2243 /**
2244 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2245 * of the <em>Geonim</em> calculated as 3/4 of a <a href=
2246 * "http://en.wikipedia.org/wiki/Biblical_and_Talmudic_units_of_measurement"
2247 * >Mil</a>. It is the sun's position at {@link #ZENITH_4_POINT_8 4.8°}
2248 * below the western horizon based on Rabbi Leo Levi's calculations. (FIXME:
2249 * additional documentation needed) This is the This is a very early zman
2250 * and should not be relied on without Rabbinical guidance.
2251 *
2252 * @return the <code>Date</code> representing the time when the sun is
2253 * 4.8° below sea level. If the calculation can't be computed
2254 * such as northern and southern locations even south of the Arctic
2255 * Circle and north of the Antarctic Circle where the sun may not
2256 * reach low enough below the horizon for this calculation, a null
2257 * will be returned. See detailed explanation on top of the
2258 * {@link AstronomicalCalendar} documentation.
2259 * @see #ZENITH_4_POINT_8
2260 */
2261 public Date getTzaisGeonim4Point8Degrees() {
2262 return getSunsetOffsetByDegrees(ComplexZmanimCalendar.ZENITH_4_POINT_8);
2263 }
2264
2265 /**
2266 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2267 * of the <em>Geonim</em> calculated at the sun's position at
2268 * {@link #ZENITH_7_POINT_083 7.083°} below the western horizon.
2269 *
2270 * @return the <code>Date</code> representing the time when the sun is
2271 * 7.083° below sea level. If the calculation can't be computed
2272 * such as northern and southern locations even south of the Arctic
2273 * Circle and north of the Antarctic Circle where the sun may not
2274 * reach low enough below the horizon for this calculation, a null
2275 * will be returned. See detailed explanation on top of the
2276 * {@link AstronomicalCalendar} documentation.
2277 * @see #ZENITH_7_POINT_083
2278 */
2279 public Date getTzaisGeonim7Point083Degrees() {
2280 return getSunsetOffsetByDegrees(ZENITH_7_POINT_083);
2281 }
2282
2283 /**
2284 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2285 * of the <em>Geonim</em> calculated at the sun's position at
2286 * {@link #ZENITH_8_POINT_5 8.5°} below the western horizon.
2287 *
2288 * @return the <code>Date</code> representing the time when the sun is
2289 * 8.5° below sea level. If the calculation can't be computed
2290 * such as northern and southern locations even south of the Arctic
2291 * Circle and north of the Antarctic Circle where the sun may not
2292 * reach low enough below the horizon for this calculation, a null
2293 * will be returned. See detailed explanation on top of the
2294 * {@link AstronomicalCalendar} documentation.
2295 * @see #ZENITH_8_POINT_5
2296 */
2297 public Date getTzaisGeonim8Point5Degrees() {
2298 return getSunsetOffsetByDegrees(ZENITH_8_POINT_5);
2299 }
2300
2301 /**
2302 * This method returns the <em>tzais</em> (nightfall) based on the opinion
2303 * of the Chavas Yair and Divray Malkiel that the time to walk the distance
2304 * of a Mil is 15 minutes for a total of 60 minutes for 4 mil after
2305 * {@link #getSeaLevelSunset() sea level sunset}.
2306 *
2307 * @return the <code>Date</code> representing 60 minutes after sea level
2308 * sunset. If the calculation can't be computed such as in the
2309 * Arctic Circle where there is at least one day a year where the
2310 * sun does not rise, and one where it does not set, a null will be
2311 * returned. See detailed explanation on top of the
2312 * {@link AstronomicalCalendar} documentation.
2313 * @see #getAlos60()
2314 */
2315 public Date getTzais60() {
2316 return getTimeOffset(getSeaLevelSunset(), 60 * MINUTE_MILLIS);
2317 }
2318
2319 /**
2320 * This method returns tzais usually calculated as 40 minutes after sunset.
2321 * Please note that Chacham Yosef Harari-Raful of Yeshivat Ateret Torah who
2322 * uses this time, does so only for calculating various other zmanai hayom
2323 * such as Sof Zman Krias Shema and Plag Hamincha. His calendars do not
2324 * publish a zman for Tzais. It should also be noted that Chacham
2325 * Harari-Raful provided a 25 minute zman for Israel. This API uses 40
2326 * minutes year round in any place on the globe by default. This offset can
2327 * be changed by calling {@link #setAteretTorahSunsetOffset(double)}.
2328 *
2329 * @return the <code>Date</code> representing 40 minutes (setable via
2330 * {@link #setAteretTorahSunsetOffset}) after sea level sunset. If
2331 * the calculation can't be computed such as in the Arctic Circle
2332 * where there is at least one day a year where the sun does not
2333 * rise, and one where it does not set, a null will be returned. See
2334 * detailed explanation on top of the {@link AstronomicalCalendar}
2335 * documentation.
2336 * @see #getAteretTorahSunsetOffset()
2337 * @see #setAteretTorahSunsetOffset(double)
2338 */
2339 public Date getTzaisAteretTorah() {
2340 return getTimeOffset(getSeaLevelSunset(), getAteretTorahSunsetOffset()
2341 * MINUTE_MILLIS);
2342 }
2343
2344 /**
2345 * Returns the offset in minutes after sunset used to calculate
2346 * <em>tzais</em> for the Ateret Torah zmanim. The defaullt value is 40
2347 * minutes.
2348 *
2349 * @return the number of minutes after sunset for Tzais.
2350 * @see #setAteretTorahSunsetOffset(double)
2351 */
2352 public double getAteretTorahSunsetOffset() {
2353 return ateretTorahSunsetOffset;
2354 }
2355
2356 /**
2357 * Allows setting the offset in minutes after sunset for the Ateret Torah
2358 * zmanim. The default if unset is 40 minutes. Chacham Yosef Harari-Raful of
2359 * Yeshivat Ateret Torah uses 40 minutes globally with the exception of
2360 * Israel where a 25 minute offset is used. This 25 minute (or any other)
2361 * offset can be overridden by this methd. This offset impacts all Ateret
2362 * Torah methods.
2363 *
2364 * @param ateretTorahSunsetOffset
2365 * the number of minutes after sunset to use as an offset for the
2366 * Ateret Torah <em>tzais</em>
2367 * @see #getAteretTorahSunsetOffset()
2368 */
2369 public void setAteretTorahSunsetOffset(double ateretTorahSunsetOffset) {
2370 this.ateretTorahSunsetOffset = ateretTorahSunsetOffset;
2371 }
2372
2373 /**
2374 * This method returns the latest <em>zman krias shema</em> (time to say
2375 * Shema in the morning) based on the calculation of Chacham Yosef
2376 * Harari-Raful of Yeshivat Ateret Torah, that the day starts
2377 * {@link #getAlos72Zmanis() 1/10th of the day} before sunrise and is
2378 * usually calculated as ending {@link #getTzaisAteretTorah() 40 minutes
2379 * after sunset}. <em>shaos zmaniyos</em> are calculated based on this day
2380 * and added to {@link #getAlos72Zmanis() alos} to reach this time. This
2381 * time is 3 <em> {@link #getShaahZmanisAteretTorah() shaos zmaniyos}</em>
2382 * (temporal hours) after {@link #getAlos72Zmanis() alos 72 zmaniyos}.<br />
2383 * <b>Note: </b> Based on this calculation <em>chatzos</em> will not be at
2384 * midday.
2385 *
2386 * @return the <code>Date</code> of the latest zman shema based on this
2387 * calculation. If the calculation can't be computed such as in the
2388 * Arctic Circle where there is at least one day a year where the
2389 * sun does not rise, and one where it does not set, a null will be
2390 * returned. See detailed explanation on top of the
2391 * {@link AstronomicalCalendar} documentation.
2392 * @see #getAlos72Zmanis()
2393 * @see #getTzaisAteretTorah()
2394 * @see #getAteretTorahSunsetOffset()
2395 * @see #setAteretTorahSunsetOffset(double)
2396 * @see #getShaahZmanisAteretTorah()
2397 */
2398 public Date getSofZmanShmaAteretTorah() {
2399 return getTimeOffset(getAlos72Zmanis(), getShaahZmanisAteretTorah() * 3);
2400 }
2401
2402 /**
2403 * This method returns the latest <em>zman tfila</em> (time to say the
2404 * morning prayers) based on the calculation of Chacham Yosef Harari-Raful
2405 * of Yeshivat Ateret Torah, that the day starts {@link #getAlos72Zmanis()
2406 * 1/10th of the day} before sunrise and and is usually calculated as ending
2407 * {@link #getTzaisAteretTorah() 40 minutes after sunset}.
2408 * <em>shaos zmaniyos</em> are calculated based on this day and added to
2409 * {@link #getAlos72Zmanis() alos} to reach this time. This time is 4
2410 * <em>{@link #getShaahZmanisAteretTorah() shaos zmaniyos}</em> (temporal
2411 * hours) after {@link #getAlos72Zmanis() alos 72 zmaniyos}.<br />
2412 * <b>Note: </b> Based on this calculation <em>chatzos</em> will not be at
2413 * midday.
2414 *
2415 * @return the <code>Date</code> of the latest zman shema based on this
2416 * calculation. If the calculation can't be computed such as in the
2417 * Arctic Circle where there is at least one day a year where the
2418 * sun does not rise, and one where it does not set, a null will be
2419 * returned. See detailed explanation on top of the
2420 * {@link AstronomicalCalendar} documentation.
2421 * @see #getAlos72Zmanis()
2422 * @see #getTzaisAteretTorah()
2423 * @see #getShaahZmanisAteretTorah()
2424 * @see #setAteretTorahSunsetOffset(double)
2425 */
2426 public Date getSofZmanTfilahAteretTorah() {
2427 return getTimeOffset(getAlos72Zmanis(), getShaahZmanisAteretTorah() * 4);
2428 }
2429
2430 /**
2431 * This method returns the time of <em>mincha gedola</em> based on the
2432 * calculation of Chacham Yosef Harari-Raful of Yeshivat Ateret Torah, that
2433 * the day starts {@link #getAlos72Zmanis() 1/10th of the day} before
2434 * sunrise and and is usually calculated as ending
2435 * {@link #getTzaisAteretTorah() 40 minutes after sunset}. This is the
2436 * perfered earliest time to pray <em>mincha</em> in the opinion of the
2437 * Ramba"m and others. For more information on this see the documentation on
2438 * <em>{@link #getMinchaGedola() mincha gedola}</em>. This is calculated as
2439 * 6.5 {@link #getShaahZmanisAteretTorah() solar hours} after alos. The
2440 * calculation used is 6.5 * {@link #getShaahZmanisAteretTorah()} after
2441 * {@link #getAlos72Zmanis() alos}.
2442 *
2443 * @see #getAlos72Zmanis()
2444 * @see #getTzaisAteretTorah()
2445 * @see #getShaahZmanisAteretTorah()
2446 * @see #getMinchaGedola()
2447 * @see #getMinchaKetanaAteretTorah()
2448 * @see ZmanimCalendar#getMinchaGedola()
2449 * @return the <code>Date</code> of the time of mincha gedola. If the
2450 * calculation can't be computed such as in the Arctic Circle where
2451 * there is at least one day a year where the sun does not rise, and
2452 * one where it does not set, a null will be returned. See detailed
2453 * explanation on top of the {@link AstronomicalCalendar}
2454 * documentation.
2455 */
2456 public Date getMinchaGedolaAteretTorah() {
2457 return getTimeOffset(getAlos72Zmanis(),
2458 getShaahZmanisAteretTorah() * 6.5);
2459 }
2460
2461 /**
2462 * This method returns the time of <em>mincha ketana</em> based on the
2463 * calculation of Chacham Yosef Harari-Raful of Yeshivat Ateret Torah, that
2464 * the day starts {@link #getAlos72Zmanis() 1/10th of the day} before
2465 * sunrise and and is usually calculated as ending
2466 * {@link #getTzaisAteretTorah() 40 minutes after sunset}. This is the
2467 * perfered earliest time to pray <em>mincha</em> in the opinion of the
2468 * Ramba"m and others. For more information on this see the documentation on
2469 * <em>{@link #getMinchaGedola() mincha gedola}</em>. This is calculated as
2470 * 9.5 {@link #getShaahZmanisAteretTorah() solar hours} after
2471 * {@link #getAlos72Zmanis() alos}. The calculation used is 9.5 *
2472 * {@link #getShaahZmanisAteretTorah()} after {@link #getAlos72Zmanis()
2473 * alos}.
2474 *
2475 * @see #getAlos72Zmanis()
2476 * @see #getTzaisAteretTorah()
2477 * @see #getShaahZmanisAteretTorah()
2478 * @see #getMinchaGedola()
2479 * @see #getMinchaKetana()
2480 * @return the <code>Date</code> of the time of mincha ketana. If the
2481 * calculation can't be computed such as in the Arctic Circle where
2482 * there is at least one day a year where the sun does not rise, and
2483 * one where it does not set, a null will be returned. See detailed
2484 * explanation on top of the {@link AstronomicalCalendar}
2485 * documentation.
2486 */
2487 public Date getMinchaKetanaAteretTorah() {
2488 return getTimeOffset(getAlos72Zmanis(),
2489 getShaahZmanisAteretTorah() * 9.5);
2490 }
2491
2492 /**
2493 * This method returns the time of <em>plag hamincha</em> based on the
2494 * calculation of Chacham Yosef Harari-Raful of Yeshivat Ateret Torah, that
2495 * the day starts {@link #getAlos72Zmanis() 1/10th of the day} before
2496 * sunrise and and is usually calculated as ending
2497 * {@link #getTzaisAteretTorah() 40 minutes after sunset}.
2498 * <em>shaos zmaniyos</em> are calculated based on this day and added to
2499 * {@link #getAlos72Zmanis() alos} to reach this time. This time is 10.75
2500 * <em>{@link #getShaahZmanisAteretTorah() shaos zmaniyos}</em> (temporal
2501 * hours) after {@link #getAlos72Zmanis() dawn}.
2502 *
2503 * @return the <code>Date</code> of the plag. If the calculation can't be
2504 * computed such as in the Arctic Circle where there is at least one
2505 * day a year where the sun does not rise, and one where it does not
2506 * set, a null will be returned. See detailed explanation on top of
2507 * the {@link AstronomicalCalendar} documentation.
2508 * @see #getAlos72Zmanis()
2509 * @see #getTzaisAteretTorah()
2510 * @see #getShaahZmanisAteretTorah()
2511 */
2512 public Date getPlagHaminchaAteretTorah() {
2513 return getTimeOffset(getAlos72Zmanis(),
2514 getShaahZmanisAteretTorah() * 10.75);
2515 }
2516
2517 /**
2518 * This method returns the time of <em>misheyakir</em> based on the common
2519 * calculation of the Syrian community in NY that the alos is a fixed minute
2520 * offset from day starting {@link #getAlos72Zmanis() 1/10th of the day}
2521 * before sunrise. The common offsets are 6 minutes (based on th Pri
2522 * Megadim, but not linked to the calculation of Alos as 1/10th of the day),
2523 * 8 and 18 minutes (possibly attributed to Chacham Baruch Ben Haim). Since
2524 * there is no universal accepted offset, the user of this API will have to
2525 * specify one. Chacham Yosef Harari-Raful of Yeshivat Ateret Torah does not
2526 * supply any zman for misheyakir and does not endorse any specific
2527 * calculation for misheyakir. For that reason, this method is not enabled.
2528 *
2529 * @param minutes
2530 * the number of minutes after alos calculated as
2531 * {@link #getAlos72Zmanis() 1/10th of the day}
2532 * @return the <code>Date</code> of misheyakir. If the calculation can't be
2533 * computed such as in the Arctic Circle where there is at least one
2534 * day a year where the sun does not rise, and one where it does not
2535 * set, a null will be returned. See detailed explanation on top of
2536 * the {@link AstronomicalCalendar} documentation.
2537 * @see #getAlos72Zmanis()
2538 */
2539 // public Date getMesheyakirAteretTorah(double minutes) {
2540 // return getTimeOffset(getAlos72Zmanis(), minutes * MINUTE_MILLIS);
2541 // }
2542 /**
2543 * Method to return <em>tzais</em> (dusk) calculated as 72 minutes zmaniyos,
2544 * or 1/10th of the day after {@link #getSeaLevelSunset() sea level sunset}.
2545 *
2546 * @return the <code>Date</code> representing the time. If the calculation
2547 * can't be computed such as in the Arctic Circle where there is at
2548 * least one day a year where the sun does not rise, and one where
2549 * it does not set, a null will be returned. See detailed
2550 * explanation on top of the {@link AstronomicalCalendar}
2551 * documentation.
2552 * @see #getAlos72Zmanis()
2553 */
2554 public Date getTzais72Zmanis() {
2555 long shaahZmanis = getShaahZmanisGra();
2556 if (shaahZmanis == Long.MIN_VALUE) {
2557 return null;
2558 }
2559 return getTimeOffset(getSeaLevelSunset(), shaahZmanis * 1.2);
2560 }
2561
2562 /**
2563 * Method to return <em>tzais</em> (dusk) calculated using 90 minutes
2564 * zmaniyos (<em>GR"A</em> and the <em>Baal Hatanya</em>) after
2565 * {@link #getSeaLevelSunset() sea level sunset}.
2566 *
2567 * @return the <code>Date</code> representing the time. If the calculation
2568 * can't be computed such as in the Arctic Circle where there is at
2569 * least one day a year where the sun does not rise, and one where
2570 * it does not set, a null will be returned. See detailed
2571 * explanation on top of the {@link AstronomicalCalendar}
2572 * documentation.
2573 * @see #getAlos90Zmanis()
2574 */
2575 public Date getTzais90Zmanis() {
2576 long shaahZmanis = getShaahZmanisGra();
2577 if (shaahZmanis == Long.MIN_VALUE) {
2578 return null;
2579 }
2580 return getTimeOffset(getSeaLevelSunset(), shaahZmanis * 1.5);
2581 }
2582
2583 /**
2584 * Method to return <em>tzais</em> (dusk) calculated using 96 minutes
2585 * zmaniyos (<em>GR"A</em> and the <em>Baal Hatanya</em>) after
2586 * {@link #getSeaLevelSunset() sea level sunset}.
2587 *
2588 * @return the <code>Date</code> representing the time. If the calculation
2589 * can't be computed such as in the Arctic Circle where there is at
2590 * least one day a year where the sun does not rise, and one where
2591 * it does not set, a null will be returned. See detailed
2592 * explanation on top of the {@link AstronomicalCalendar}
2593 * documentation.
2594 * @see #getAlos96Zmanis()
2595 */
2596 public Date getTzais96Zmanis() {
2597 long shaahZmanis = getShaahZmanisGra();
2598 if (shaahZmanis == Long.MIN_VALUE) {
2599 return null;
2600 }
2601 return getTimeOffset(getSeaLevelSunset(), shaahZmanis * 1.6);
2602 }
2603
2604 /**
2605 * Method to return <em>tzais</em> (dusk) calculated as 90 minutes after sea
2606 * level sunset. This method returns <em>tzais</em> (nightfall) based on the
2607 * opinion of the Magen Avraham that the time to walk the distance of a Mil
2608 * in the Ramba"m's opinion is 18 minutes for a total of 90 minutes based on
2609 * the opinion of <em>Ula</em> who calculated <em>tzais</em> as 5 Mil after
2610 * sea level shkiah (sunset). A similar calculation
2611 * {@link #getTzais19Point8Degrees()}uses solar position calculations based
2612 * on this time.
2613 *
2614 * @return the <code>Date</code> representing the time. If the calculation
2615 * can't be computed such as in the Arctic Circle where there is at
2616 * least one day a year where the sun does not rise, and one where
2617 * it does not set, a null will be returned. See detailed
2618 * explanation on top of the {@link AstronomicalCalendar}
2619 * documentation.
2620 * @see #getTzais19Point8Degrees()
2621 * @see #getAlos90()
2622 */
2623 public Date getTzais90() {
2624 return getTimeOffset(getSeaLevelSunset(), 90 * MINUTE_MILLIS);
2625 }
2626
2627 /**
2628 * This method returns <em>tzais</em> (nightfall) based on the opinion of
2629 * the Magen Avraham that the time to walk the distance of a Mil in the
2630 * Ramba"ms opinion is 2/5 of an hour (24 minutes) for a total of 120
2631 * minutes based on the opinion of <em>Ula</em> who calculated
2632 * <em>tzais</em> as 5 Mil after sea level shkiah (sunset). A similar
2633 * calculation {@link #getTzais26Degrees()} uses temporal calculations based
2634 * on this time.
2635 *
2636 * @return the <code>Date</code> representing the time. If the calculation
2637 * can't be computed such as in the Arctic Circle where there is at
2638 * least one day a year where the sun does not rise, and one where
2639 * it does not set, a null will be returned. See detailed
2640 * explanation on top of the {@link AstronomicalCalendar}
2641 * documentation.
2642 * @see #getTzais26Degrees()
2643 * @see #getAlos120()
2644 */
2645 public Date getTzais120() {
2646 return getTimeOffset(getSeaLevelSunset(), 120 * MINUTE_MILLIS);
2647 }
2648
2649 /**
2650 * Method to return <em>tzais</em> (dusk) calculated using 120 minutes
2651 * zmaniyos (<em>GR"A</em> and the <em>Baal Hatanya</em>) after
2652 * {@link #getSeaLevelSunset() sea level sunset}.
2653 *
2654 * @return the <code>Date</code> representing the time. If the calculation
2655 * can't be computed such as in the Arctic Circle where there is at
2656 * least one day a year where the sun does not rise, and one where
2657 * it does not set, a null will be returned. See detailed
2658 * explanation on top of the {@link AstronomicalCalendar}
2659 * documentation.
2660 * @see #getAlos120Zmanis()
2661 */
2662 public Date getTzais120Zmanis() {
2663 long shaahZmanis = getShaahZmanisGra();
2664 if (shaahZmanis == Long.MIN_VALUE) {
2665 return null;
2666 }
2667 return getTimeOffset(getSeaLevelSunset(), shaahZmanis * 2.0);
2668 }
2669
2670 /**
2671 * For information on how this is calculated see the comments on
2672 * {@link #getAlos16Point1Degrees()}
2673 *
2674 * @return the <code>Date</code> representing the time. If the calculation
2675 * can't be computed such as northern and southern locations even
2676 * south of the Arctic Circle and north of the Antarctic Circle
2677 * where the sun may not reach low enough below the horizon for this
2678 * calculation, a null will be returned. See detailed explanation on
2679 * top of the {@link AstronomicalCalendar} documentation.
2680 * @see #getTzais72()
2681 * @see #getAlos16Point1Degrees() for more information on this calculation.
2682 */
2683 public Date getTzais16Point1Degrees() {
2684 return getSunsetOffsetByDegrees(ZENITH_16_POINT_1);
2685 }
2686
2687 /**
2688 * For information on how this is calculated see the comments on
2689 * {@link #getAlos26Degrees()}
2690 *
2691 * @return the <code>Date</code> representing the time. If the calculation
2692 * can't be computed such as northern and southern locations even
2693 * south of the Arctic Circle and north of the Antarctic Circle
2694 * where the sun may not reach low enough below the horizon for this
2695 * calculation, a null will be returned. See detailed explanation on
2696 * top of the {@link AstronomicalCalendar} documentation.
2697 * @see #getTzais120()
2698 * @see #getAlos26Degrees()
2699 */
2700 public Date getTzais26Degrees() {
2701 return getSunsetOffsetByDegrees(ZENITH_26_DEGREES);
2702 }
2703
2704 /**
2705 * For information on how this is calculated see the comments on
2706 * {@link #getAlos18Degrees()}
2707 *
2708 * @return the <code>Date</code> representing the time. If the calculation
2709 * can't be computed such as northern and southern locations even
2710 * south of the Arctic Circle and north of the Antarctic Circle
2711 * where the sun may not reach low enough below the horizon for this
2712 * calculation, a null will be returned. See detailed explanation on
2713 * top of the {@link AstronomicalCalendar} documentation.
2714 * @see #getAlos18Degrees()
2715 */
2716 public Date getTzais18Degrees() {
2717 return getSunsetOffsetByDegrees(ASTRONOMICAL_ZENITH);
2718 }
2719
2720 /**
2721 * For information on how this is calculated see the comments on
2722 * {@link #getAlos19Point8Degrees()}
2723 *
2724 * @return the <code>Date</code> representing the time. If the calculation
2725 * can't be computed such as northern and southern locations even
2726 * south of the Arctic Circle and north of the Antarctic Circle
2727 * where the sun may not reach low enough below the horizon for this
2728 * calculation, a null will be returned. See detailed explanation on
2729 * top of the {@link AstronomicalCalendar} documentation.
2730 * @see #getTzais90()
2731 * @see #getAlos19Point8Degrees()
2732 */
2733 public Date getTzais19Point8Degrees() {
2734 return getSunsetOffsetByDegrees(ZENITH_19_POINT_8);
2735 }
2736
2737 /**
2738 * A method to return <em>tzais</em> (dusk) calculated as 96 minutes after
2739 * sea level sunset. For information on how this is calculated see the
2740 * comments on {@link #getAlos96()}.
2741 *
2742 * @return the <code>Date</code> representing the time. If the calculation
2743 * can't be computed such as in the Arctic Circle where there is at
2744 * least one day a year where the sun does not rise, and one where
2745 * it does not set, a null will be returned. See detailed
2746 * explanation on top of the {@link AstronomicalCalendar}
2747 * documentation.
2748 * @see #getAlos96()
2749 */
2750 public Date getTzais96() {
2751 return getTimeOffset(getSeaLevelSunset(), 96 * MINUTE_MILLIS);
2752 }
2753
2754 /**
2755 * A method that returns the local time for fixed <em>chatzos</em>. This
2756 * time is noon and midnight adjusted from standard time to account for the
2757 * local latitude. The 360° of the globe divided by 24 calculates to
2758 * 15° per hour with 4 minutes per degree, so at a longitude of 0 , 15,
2759 * 30 etc Chatzos in 12:00 noon. Lakewood, NJ whose longitude is -74.2094 is
2760 * 0.7906 away from the closest multiple of 15 at -75°. This is
2761 * multiplied by 4 to yeild 3 minutes and 10 seconds for a chatzos of
2762 * 11:56:50. This method is not tied to the theoretical 15° timezones,
2763 * but will adjust to the actual timezone and <a
2764 * href="http://en.wikipedia.org/wiki/Daylight_saving_time">Daylight saving
2765 * time</a>.
2766 *
2767 * @return the Date representing the local <em>chatzos</em>
2768 * @see GeoLocation#getLocalMeanTimeOffset()
2769 */
2770 public Date getFixedLocalChatzos() {
2771 return getTimeOffset(getDateFromTime(12.0
2772 - getGeoLocation().getTimeZone().getRawOffset() / HOUR_MILLIS),
2773 -getGeoLocation().getLocalMeanTimeOffset());
2774 }
2775
2776 /**
2777 * A method that returns the latest <em>zman krias shema</em> (time to say
2778 * Shema in the morning) calculated as 3 hours before
2779 * {@link #getFixedLocalChatzos()}.
2780 *
2781 * @return the <code>Date</code> of the latest zman shema.
2782 * @see #getFixedLocalChatzos()
2783 * @see #getSofZmanTfilaFixedLocal()
2784 */
2785 public Date getSofZmanShmaFixedLocal() {
2786 return getTimeOffset(getFixedLocalChatzos(), -180 * MINUTE_MILLIS);
2787 }
2788
2789 /**
2790 * This method returns the latest <em>zman tfila</em> (time to say the
2791 * morning prayers) calculated as 2 hours before
2792 * {@link #getFixedLocalChatzos()}.
2793 *
2794 * @return the <code>Date</code> of the latest zman tfila.
2795 * @see #getFixedLocalChatzos()
2796 * @see #getSofZmanShmaFixedLocal()
2797 */
2798 public Date getSofZmanTfilaFixedLocal() {
2799 return getTimeOffset(getFixedLocalChatzos(), -120 * MINUTE_MILLIS);
2800 }
2801
2802 /**
2803 * @see java.lang.Object#equals(Object)
2804 */
2805 public boolean equals(Object object) {
2806 if (this == object) {
2807 return true;
2808 }
2809 if (!(object instanceof ComplexZmanimCalendar)) {
2810 return false;
2811 }
2812 ComplexZmanimCalendar cCal = (ComplexZmanimCalendar) object;
2813 // return getCalendar().getTime().equals(cCal.getCalendar().getTime())
2814 return getCalendar().equals(cCal.getCalendar())
2815 && getGeoLocation().equals(cCal.getGeoLocation())
2816 && getAstronomicalCalculator().equals(
2817 cCal.getAstronomicalCalculator());
2818 }
2819
2820 /**
2821 * @see java.lang.Object#hashCode()
2822 */
2823 public int hashCode() {
2824 int result = 17;
2825 result = 37 * result + getClass().hashCode(); // needed or this and
2826 // subclasses will
2827 // return identical hash
2828 result += 37 * result + getCalendar().hashCode();
2829 result += 37 * result + getGeoLocation().hashCode();
2830 result += 37 * result + getAstronomicalCalculator().hashCode();
2831 return result;
2832 }
2833 }