Java 8 – How to convert ZonedDateTime in different formats ?

In this article, we will learn how to convert ZonedDateTime in different formats using Java 1.8 version or in short how to convert ZonedDateTime into String-form

For String to ZonedDateTime conversion, read Java 8 – How to convert String to ZonedDateTime ?

1. Convert ZonedDateTime in different formats :

  • We can convert default ISO_ZONED_DATE_TIME format (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) to any other formats using ZonedDateTime.format() method by passing DateTimeFormatter as argument with required pattern in String-form
  • In below illustration, we are using 6 different custom formats as mentioned below,
    1. DateTimeFormatter.ofPattern(“dd-MM-yyyy HH:mm:ss.nnn VV O“)
    2. DateTimeFormatter.ofPattern(“dd-MM-yyyy hh:mm:ss.nnn a VV“)
    3. DateTimeFormatter.ofPattern(“dd.MM.yyyy HH:mm:ss VV O“)
    4. DateTimeFormatter.ofPattern(“dd-MMM-yyyy hh:mm:ss a VV“)
    5. DateTimeFormatter.ofPattern(“E dd/MMMM/yyyy HH:mm VV O“)
    6. DateTimeFormatter.ofPattern(“EEEE MMMM dd, yyyy hh:mm a z VV“)
  • Note: If the specified custom format/pattern isn’t in correct form then DateTimeParseException is thrown

2. ZonedDateTime examples in different formats :

2.1 ZonedDateTime to (dd-MM-yyyy HH:mm:ss.nnn VV O) format :

  • This example converts ZonedDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) format to (dd-MM-yyyy HH:mm:ss.nnn VV O) format

FormatZonedDateTimeExample1.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeExample1 {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("dd-MM-yyyy HH:mm:ss.nnn VV O");


		// 3. ZonedDateTime to (dd-MM-yyyy HH:mm:ss.nnn VV O) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.print("\nZonedDateTime to (dd-MM-yyyy HH:mm:ss.nnn VV O) format :- \n" 
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:32:52.852495900+05:30[Asia/Calcutta]

ZonedDateTime to (dd-MM-yyyy HH:mm:ss.nnn VV O) format :- 
12-08-2022 15:32:52.852495900 Asia/Calcutta GMT+5:30

2.2 ZonedDateTime to (dd-MM-yyyy hh:mm:ss.nnn a VV) format :

  • This example converts ZonedDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) format to (dd-MM-yyyy hh:mm:ss.nnn a VV) format

FormatZonedDateTimeExample2.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeExample2 {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("dd-MM-yyyy hh:mm:ss.nnn a VV");


		// 3. ZonedDateTime to (dd-MM-yyyy hh:mm:ss.nnn a VV) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.print("\nZonedDateTime to (dd-MM-yyyy hh:mm:ss.nnn a VV) format :- \n" 
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:33:22.661067600+05:30[Asia/Calcutta]

ZonedDateTime to (dd-MM-yyyy hh:mm:ss.nnn a VV) format :- 
12-08-2022 03:33:22.661067600 pm Asia/Calcutta

2.3 ZonedDateTime to (dd.MM.yyyy HH:mm:ss VV O) format :

  • This example converts ZonedDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) format to (dd.MM.yyyy HH:mm:ss VV O) format

FormatZonedDateTimeExample3.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeExample3 {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("dd.MM.yyyy HH:mm:ss VV O");


		// 3. ZonedDateTime to (dd.MM.yyyy HH:mm:ss VV O) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.print("\nZonedDateTime to (dd.MM.yyyy HH:mm:ss VV O) format :- \n" 
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:33:54.749760700+05:30[Asia/Calcutta]

ZonedDateTime to (dd.MM.yyyy HH:mm:ss VV O) format :- 
12.08.2022 15:33:54 Asia/Calcutta GMT+5:30

2.4 ZonedDateTime to (dd-MMM-yyyy hh:mm:ss a VV) format :

  • This example converts ZonedDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) format to (dd-MMM-yyyy hh:mm:ss a VV) format

FormatZonedDateTimeExample4.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeExample4 {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("dd-MMM-yyyy hh:mm:ss a VV");


		// 3. ZonedDateTime to (dd-MMM-yyyy hh:mm:ss a VV) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.print("\nZonedDateTime to (dd-MMM-yyyy hh:mm:ss a VV) format :- \n" 
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:34:23.791753300+05:30[Asia/Calcutta]

ZonedDateTime to (dd-MMM-yyyy hh:mm:ss a VV) format :- 
12-Aug-2022 03:34:23 pm Asia/Calcutta

2.5 ZonedDateTime to (E dd/MMMM/yyyy HH:mm VV O) format :

  • This example converts ZonedDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) format to (E dd/MMMM/yyyy HH:mm VV O) format

FormatZonedDateTimeExample5.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeExample5 {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("E dd/MMMM/yyyy HH:mm VV O");


		// 3. ZonedDateTime to (E dd/MMMM/yyyy HH:mm VV O) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.print("\nZonedDateTime to (E dd/MMMM/yyyy HH:mm VV O) format :- \n" 
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:34:54.744020800+05:30[Asia/Calcutta]

ZonedDateTime to (E dd/MMMM/yyyy HH:mm VV O) format :- 
Fri 12/August/2022 15:34 Asia/Calcutta GMT+5:30

2.6 ZonedDateTime to (EEEE MMMM dd, yyyy hh:mm a z VV) format :

  • This example converts ZonedDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm[Region/City]) format to (EEEE MMMM dd, yyyy hh:mm a z VV) format

FormatZonedDateTimeExample6.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeExample6 {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("EEEE MMMM dd, yyyy hh:mm a z VV");


		// 3. ZonedDateTime to (EEEE MMMM dd, yyyy hh:mm a z VV) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.print("\nZonedDateTime to (EEEE MMMM dd, yyyy hh:mm a z VV) format :- \n" 
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:35:23.986304700+05:30[Asia/Calcutta]

ZonedDateTime to (EEEE MMMM dd, yyyy hh:mm a z VV) format :- 
Friday August 12, 2022 03:35 pm IST Asia/Calcutta

3. Throws DateTimeParseException for Invalid format :

  • If the specified pattern/format is invalid then DateTimeParseException is thrown
  • In the below illustration, small-letter ‘m‘ is used for Month which is wrong
  • Date notation,
    • Capital-letter ‘M‘ should be used for Month
    • Small-letter ‘d‘ should be used for Day
    • Small-letter ‘y‘ should be used for Year
  • Time notation,
    • Capital-letter ‘H‘ should be used for 24-hour Hour format
    • Small-letter ‘h‘ should be used for 12-hour Hour format
    • Small-letter ‘m‘ should be used for Minute
    • Small-letter ‘s‘ should be used for Second
    • Small-letter ‘n‘ should be used for Nanosecond

FormatZonedDateTimeException.java

package in.bench.resources.java8.zoneddatetime.examples;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTimeException {

	public static void main(String[] args) {

		// 1. get current system date/time
		ZonedDateTime zonedDateTime = ZonedDateTime.now();
		System.out.println("Current System Date/time is :- \n" 
				+ zonedDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofPattern("dd.mmm.yyyy HH:mm:ss.nnn z VV");


		// 3. ZonedDateTime to (dd.mmm.yyyy HH:mm:ss.nnn z VV) format in String form
		String str = zonedDateTime.format(dateTimeFormatter);
		System.out.println("\nZonedDateTime to (dd.mmm.yyyy HH:mm:ss.nnn z VV) format :- \n"
				+ str);
	}
}

Output:

Current System Date/time is :- 
2022-08-12T15:36:34.101240500+05:30[Asia/Calcutta]
Exception in thread "main" java.lang.IllegalArgumentException: Too many pattern letters: m
	at java.base/java.time.format.DateTimeFormatterBuilder
.parseField(DateTimeFormatterBuilder.java:2020)
	at java.base/java.time.format.DateTimeFormatterBuilder
.parsePattern(DateTimeFormatterBuilder.java:1804)
	at java.base/java.time.format.DateTimeFormatterBuilder
.appendPattern(DateTimeFormatterBuilder.java:1772)
	at java.base/java.time.format.DateTimeFormatter
.ofPattern(DateTimeFormatter.java:566)
	at in.bench.resources.java8.zoneddatetime.examples.FormatZonedDateTimeException
.main(FormatZonedDateTimeException.java:18)

Related Articles:

References:

Happy Coding !!
Happy Learning !!

Java 8 – How to convert ZonedDateTime in different Format Style ?
Java 8 – How to convert String to ZonedDateTime ?