How to Add a Time Zone in the Java 8 Date/Time API

  • google plus

In Brief...

When working with date and time objects in Java 8 you will probably need to add a time zone sooner or later. A time zone can be expressed as an offset from UTC (Coordinated Universal Time, or the time at the prime meridian running through Greenwich, England), a time zone ID (e.g., "America/New York"), or a time zone name (e.g., EST). In order to add a time zone you will need the ZonedDateTime, the ZoneOffset, or the ZoneId class. Each class is located in the java.time package. To understand how to add a time zone to a date/time object in Java 8, follow these four steps.

Take our Introduction to Java Training course for free.

See the Course Outline and Register


  1. Open your text editor and create the Java program that will add time zone expressions to date time objects. Type in the following Java statements:
    import java.time.*;
    import java.time.format.*;
    public class AddTimeZone {
    	public static void main (String args[]) {
    		// Create a date time object with time zone for current date time and default time zone:
    		DateTimeFormatter formatTodayWithZoneOffset=DateTimeFormatter.ofPattern("MM/dd/yy hh:mm:ss Z");
    		System.out.format("Formatted date time with default zone offset is %s\n", todayWithDefaultTimeZone.format(formatTodayWithZoneOffset));
    		DateTimeFormatter formatTodayWithZoneName=DateTimeFormatter.ofPattern("MM/dd/yy hh:mm:ss z");
    		System.out.format("Formatted date time with default zone name is %s\n", todayWithDefaultTimeZone.format(formatTodayWithZoneName));
    		DateTimeFormatter formatTodayWithZoneId=DateTimeFormatter.ofPattern("MM/dd/yy hh:mm:ss VV");
    		System.out.format("Formatted date time with default zone ID is %s\n", todayWithDefaultTimeZone.format(formatTodayWithZoneId));
    		// Create a zoned date time object with current date and time and New York time zone ID:
    		ZoneId timeZone=ZoneId.of("America/New_York");
    		ZonedDateTime todayWithTimeZone=ZonedDateTime.of(today, timeZone);
    		System.out.format("Formatted date time with zone ID of New York is %s\n", todayWithTimeZone.format(formatTodayWithZoneId));
    		// Create a zoned date time object with current date and time and zone offset UTC -5 hours:
    		ZoneId timeZoneOffset=ZoneOffset.of("-0500");
    		ZonedDateTime todayWithTimeZoneOffset=ZonedDateTime.of(todayZoneOffset, timeZoneOffset);
    		System.out.format("Formatted date time with zone offset of UTC -5 hours is %s\n", todayWithTimeZone.format(formatTodayWithZoneOffset));

    The ZonedDateTime class permits you to create a date/time object with a time zone. The default time zone will be used; i.e., the time zone you have established on your computer. You can use the DateTimeFormatter class to display the time zone. In the Java code, the time zone is displayed as zone offset, zone name and zone ID. Note that the date time formatter pattern is "Z", "z", and "VV", respectively. The program also creates a date/time object and then adds the zone ID using the of method of the ZoneId class. Finally, a time zone is added to another date/time object using the of method of the ZoneOffset class.

  2. Save your file as
  3. Open a command prompt and navigate to the directory containing your new Java program. Then type in the command to compile the source and hit Enter.
    Compile Program with Time Zone
  4. You are ready to test your Java program. Type in the command to run the Java runtime launcher and hit Enter. Notice the output shows the formatted values of the various time zone expressions associated with the date and time objects that you created.
    Run Program with Time Zone

Author: Stephen Withrow

Stephen has over 30 years' experience in training, development, and consulting in a variety of technology areas including Java, C, C++, XML, JavaScript, AJAX, Tomcat, JBoss, Oracle, and DB2. His background includes design and implementation of business solutions on client/server, Web, and enterprise platforms. Stephen is a published writer in both technical and non-technical endeavors. Stephen received an undergraduate degree in Computer Science and Physics from Florida State University.