
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!