Java 8 – How to convert OffsetDateTime in different Format Style ?

In this article, we will learn how to format OffsetDateTime in different Format Style provided in Java 1.8 version

1. Format OffsetDateTime in different Format Style :

  • FormatStyle class provides 4 different enum constants for formatting OffsetDateTime, those are
    1. FormatStyle.SHORT
    2. FormatStyle.MEDIUM
    3. FormatStyle.LONG
    4. FormatStyle.FULL
  • In below illustration, we are using above provided in-built formats to format OffsetDateTime as listed below,
    1. DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
    2. DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
    3. DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
    4. DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL);
  • Note: for creating above formats we need DateTimeFormatter

2. OffsetDateTime examples in different Format Style :

  • OffsetDateTime to FormatStyle.SHORT format
  • OffsetDateTime to FormatStyle.MEDIUM format
  • OffsetDateTime to FormatStyle.LONG format
  • OffsetDateTime to FormatStyle.FULL format

2.1 OffsetDateTime to FormatStyle.SHORT format :

  • This format style converts OffsetDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm) format to (dd/MM/yy, hh:mm a) format ignoring second & nanosecond fields

FormatOffsetDateTimeToShortStyle.java

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

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class FormatOffsetDateTimeToShortStyle {

	public static void main(String[] args) {

		// 1. get Offset Date/time
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println("Offset Date/time is :- \n" + offsetDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofLocalizedDateTime(FormatStyle.SHORT);


		// 3. OffsetDateTime to FormatStyle.SHORT format in String-form
		String str = offsetDateTime.format(dateTimeFormatter);
		System.out.print("\nOffsetDateTime to FormatStyle.SHORT format :- \n"  + str);
	}
}

Output:

Offset Date/time is :- 
2022-08-16T19:51:48.736325500+05:30

OffsetDateTime to FormatStyle.SHORT format :- 
16/08/22, 7:51 pm

2.2 OffsetDateTime to FormatStyle.MEDIUM format :

  • This format style converts OffsetDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm) format to (dd-MMM-yyyy, hh:mm:ss a) format ignoring nanosecond field

FormatOffsetDateTimeToMediumStyle.java

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

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class FormatOffsetDateTimeToMediumStyle {

	public static void main(String[] args) {

		// 1. get Offset Date/time
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println("Offset Date/time is :- \n" + offsetDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofLocalizedDateTime(FormatStyle.MEDIUM);


		// 3. OffsetDateTime to FormatStyle.MEDIUM format in String-form
		String str = offsetDateTime.format(dateTimeFormatter);
		System.out.print("\nOffsetDateTime to FormatStyle.MEDIUM format :- \n"  + str);
	}
}

Output:

Offset Date/time is :- 
2022-08-16T19:53:06.286628100+05:30

OffsetDateTime to FormatStyle.MEDIUM format :- 
16-Aug-2022, 7:53:06 pm

2.3 OffsetDateTime to FormatStyle.LONG format :

  • While converting default OffsetDateTime format to LONG style format throws runtime exception stating “Zone information is not available
  • So, it should be strictly used when we are dealing with Zone information like ZonedDateTime

FormatOffsetDateTimeToLongStyle.java

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

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class FormatOffsetDateTimeToLongStyle {

	public static void main(String[] args) {

		// 1. get Offset Date/time
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println("Offset Date/time is :- \n" + offsetDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofLocalizedDateTime(FormatStyle.LONG);


		// 3. OffsetDateTime to FormatStyle.LONG format in String-form
		String str = offsetDateTime.format(dateTimeFormatter);
		System.out.print("\nOffsetDateTime to FormatStyle.LONG format :- \n"  + str);
	}
}

Output:

Offset Date/time is :- 
2022-08-16T19:53:38.894052900+05:30
Exception in thread "main" java.time.DateTimeException: 
Unable to extract ZoneId from temporal 2022-08-16T19:53:38.894052900+05:30
	at java.base/java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:289)
	at java.base/java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser
.format(DateTimeFormatterBuilder.java:4142)
	at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser
.format(DateTimeFormatterBuilder.java:2402)
	at java.base/java.time.format.DateTimeFormatterBuilder$LocalizedPrinterParser
.format(DateTimeFormatterBuilder.java:4844)
	at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser
.format(DateTimeFormatterBuilder.java:2402)
	at java.base/java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1849)
	at java.base/java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1823)
	at java.base/java.time.OffsetDateTime.format(OffsetDateTime.java:1681)
	at in.bench.resources.java8.offsetdatetime.examples.FormatOffsetDateTimeToLongStyle
.main(FormatOffsetDateTimeToLongStyle.java:22)

2.4 OffsetDateTime to FormatStyle.FULL format :

  • This is very much similar like above example which requires Zone information otherwise throws runtime exception stating “Zone information is not available” during conversion from OffsetDateTime in default format to FULL style format
  • So, it should be strictly used when we are dealing with Zone information like ZonedDateTime

FormatOffsetDateTimeToFullStyle.java

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

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class FormatOffsetDateTimeToFullStyle {

	public static void main(String[] args) {

		// 1. get Offset Date/time
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println("Offset Date/time is :- \n" + offsetDateTime);


		// 2. DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter
				.ofLocalizedDateTime(FormatStyle.FULL);


		// 3. OffsetDateTime to FormatStyle.FULL format in String-form
		String str = offsetDateTime.format(dateTimeFormatter);
		System.out.print("\nOffsetDateTime to FormatStyle.FULL format :- \n"  + str);
	}
}

Output:

Offset Date/time is :- 
2022-08-16T19:54:30.059456500+05:30
Exception in thread "main" java.time.DateTimeException: 
Unable to extract ZoneId from temporal 2022-08-16T19:54:30.059456500+05:30
	at java.base/java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:289)
	at java.base/java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser
.format(DateTimeFormatterBuilder.java:4142)
	at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser
.format(DateTimeFormatterBuilder.java:2402)
	at java.base/java.time.format.DateTimeFormatterBuilder$LocalizedPrinterParser
.format(DateTimeFormatterBuilder.java:4844)
	at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser
.format(DateTimeFormatterBuilder.java:2402)
	at java.base/java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1849)
	at java.base/java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1823)
	at java.base/java.time.OffsetDateTime.format(OffsetDateTime.java:1681)
	at in.bench.resources.java8.offsetdatetime.examples.FormatOffsetDateTimeToFullStyle
.main(FormatOffsetDateTimeToFullStyle.java:22)

Related Articles:

References:

Happy Coding !!
Happy Learning !!

Java 8 – How to convert OffsetDateTime to LocalDateTime ?
Java 8 – How to convert OffsetDateTime in different formats ?