Question:
Why does the output of zmanim for a different time zone appear incorrect?
Answer:
One of the common issues encountered by developers using the API is that zmanim generated for a different time zone than the user’s time zone may return output that appears incorrect. For example a user in Lakewood, NJ trying to calculate sunrise for Yerushalayim may attempt to use the following code:
String locationName = "Jerusalem"; double latitude = 31.778; // Har habayis double longitude = 35.2354;// Har Habayis double elevation = 0; TimeZone timeZone = TimeZone.getTimeZone("Asia/Jerusalem"); GeoLocation location = new GeoLocation(locationName, latitude, longitude, elevation, timeZone); ZmanimCalendar zc = new ZmanimCalendar(location); zc.getCalendar().set(2011, Calendar.FEBRUARY, 8); System.out.println("Sunrise: " + zc.getSunrise()); System.out.println("Sunset: " + zc.getSunset());
While you would expect a sunrise of 6:27:41 AM and sunset of 5:19:19 PM, running this code on a computer anywhere in the Eastern Standard time zone would generate the following time that appears to be 7 hours early:
Sunrise: Mon Feb 07 23:27:41 EST 2011 Sunset: Tue Feb 08 10:19:19 EST 2011
The issue is simple, and the sunrise and sunset returned above are actually accurate. Zmanim are returned by the Zmanim API as a Java Date object that represents a moment in time (stored internally by Java as Unix Time – the number of milliseconds since the January 1, 1970 GMT). Sunrise in Yerushalayim on February 8th actually happens at 11:27:41 PM on February 7th EST. Java is simply outputting the Date as a String formatted to the users default time zone (EST in this example). The user probably intends to output the time in IST – Israel Standard Time (“Asia/Jerusalem” in the Olson database). To do this you have to output the zmanim using a formatter set to use the “Asia/Jerusalem” time zone.
DateFormat zmanimFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); zmanimFormat.setTimeZone(location.getTimeZone()); System.out.println("sunrise: " + zmanimFormat.format(zc.getSunrise())); System.out.println("sunset:" + zmanimFormat.format(zc.getSunset()));
will output the expected
sunrise: Tue Feb 08 06:27:41 IST 2011 sunset:Tue Feb 08 17:19:19 IST 2011
Below is the full code example.
import com.kosherjava.zmanim.*; import com.kosherjava.zmanim.util.*; import java.util.TimeZone; public class FormatZmanim{ public static void main(String [] args) { String locationName = "Jerusalem"; double latitude = 31.778; //latitude of Har habayis double longitude = 35.2354; //longitude of Har Habayis double elevation = 0; //optional elevation //use a Valid Olson Database timezone listed in java.util.TimeZone.getAvailableIDs() TimeZone timeZone = TimeZone.getTimeZone("Asia/Jerusalem"); //create the location object GeoLocation location = new GeoLocation(locationName, latitude, longitude, elevation, timeZone); ZmanimCalendar zc = new ZmanimCalendar(location); //create the ZmanimCalendar zc.getCalendar().set(2011, Calendar.FEBRUARY, 8); //set the date DateFormat zmanimFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); //Create the formatter zmanimFormat.setTimeZone(location.getTimeZone()); //set the formatter's time zone System.out.println("sunrise: " + zmanimFormat.format(zc.getSunrise())); System.out.println("sunset:" + zmanimFormat.format(zc.getSunset())); } }
how you get candle of shabat in jerusalem before 40 min sunset?
Is it possible to get a program for Sha`oth Zemaniyoth that tells you what hour of the day it is in real time? And how far through the hour you are? e.g. Hour 8 – 70% complete, Hour 9 – 20% complete. One that goes by latitude longitude?
I’d love to buy a clock for my house that goes by Sha`oth Zemaniyoth time or have a clock on my laptop so I always know what time it is.
David,
The only program I know of that does what you are looking for is the iPhone program Zmanim Clock. I do not know of any other such program. Alternatively you can get a sundial.
You may want to look at a similar application (widget) for android. Also called zmanimclock.
link:
play.google.com/store/apps/details?id=ich.android.zmanimclock (no longer available)
Thanks for the reply. Much appreciated!