FAQ: Outputting Zmanim for A Different Time Zone With the the Zmanim API
Posted by KosherJava on 08 Nov 2011 - י״א חשון תשע״ב | Filed under: Software Dev, Zmanim

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 2011The 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 2011Below is the full code example.
import net.sourceforge.zmanim.*;
import net.sourceforge.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()));
}
}
The
The technical notes on the original 
Calculating the earliest and latest times for
Until this point the
The Zmanim API did not have dedicated zmanim to claculate the Erev Pesach zmanim of sof zman achilas
Thanks to 
