Java 8 – How to parse OffsetDateTime in String form ?

In this article, we will learn how to parse OffsetDateTime in String form using OffsetDateTime.parse() method provided in Java 1.8 version

1. Parse java.time.OffsetDateTime :

  • Sometimes, we need to parse date/time passed in String-form to OffsetDateTime, for that we can use OffsetDateTime.parse() method which will return OffsetDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm) format
  • There are 2 variants of OffsetDateTime.parse() method –
    1. OffsetDateTime.parse(CharSequence) – returns OffsetDateTime in default (yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm) format
    2. OffsetDateTime.parse(CharSequence, DateTimeFormatter) – this variant helps to customize OffsetDateTime format using formatter
  • Both variants throws java.time.format.DateTimeParseException when,
    • For the 1st variant, if the specified date/time in string-form isn’t in default formats as listed below,
      • yyyy-MM-ddTHH:mm:ss.nnn+/-HH:mm
      • yyyy-MM-ddTHH:mm:ss+/-HH:mm
      • yyyy-MM-ddTHH:mm+/-HH:mm
    • For the 2nd variant, if specified date/time in string-form isn’t matching with custom pattern/format specified in the DateTimeFormatter
  • If the given String is in default format then,
    • DateTimeFormatter isn’t required
    • Or else default formatter DateTimeFormatter.ISO_OFFSET_DATE_TIME can be used
  • Finally, print OffsetDateTime to the console for both variants

ParseOffsetDateTime.java

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

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

public class ParseOffsetDateTime {

	public static void main(String[] args) {

		// 1. Office Joining date/time
		String officeJoiningDateTime = "2017-03-06T08:29:59.987654321+05:30";


		// 1.1 convert/parse to dateInString to OffsetDateTime in default format
		OffsetDateTime parsedOfficeJoiningDateTime = OffsetDateTime.parse(officeJoiningDateTime);


		// 1.2 print to console
		System.out.println("Original String is  = " + officeJoiningDateTime);
		System.out.println("Parsed Date/time is = " + parsedOfficeJoiningDateTime);



		// 2. Office Relieving date/time
		String officeRelievingDateTime = "2019-06-28T17:30:01.123456789-09:30";


		// 2.1 custom format
		DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ISO_OFFSET_DATE_TIME;


		// 2.2 convert/parse to dateInString to LocalDate in custom format
		OffsetDateTime parsedOfficeRelievingDateTime = OffsetDateTime
				.parse(officeRelievingDateTime, dateTimeFormatter2);


		// 2.3 print to console
		System.out.println("\nOriginal String is  = " + officeRelievingDateTime);
		System.out.println("Parsed Date/time is = " + parsedOfficeRelievingDateTime);



		// 3. Session start date/time
		String sessionStartDateTime = "29-06-2017 11:29:45 am +04:00";


		// 3.1 custom format
		DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter
				.ofPattern("dd-MM-yyyy HH:mm:ss a VV");


		// 3.2 convert/parse to dateInString to LocalDate in custom format
		OffsetDateTime parsedSessionStartDateTime = OffsetDateTime
				.parse(sessionStartDateTime, dateTimeFormatter3);


		// 3.3 print to console
		System.out.println("\nOriginal String is  = " + sessionStartDateTime);
		System.out.println("Parsed Date/time is = " + parsedSessionStartDateTime);



		// 4. Session end date/time
		String sessionEndDateTime = "29.06.2017 05:59 pm +02:00";


		// 4.1 custom format
		DateTimeFormatter dateTimeFormatter4 = DateTimeFormatter
				.ofPattern("dd.MM.yyyy hh:mm a VV");


		// 4.2 convert/parse to dateInString to LocalDate in custom format
		OffsetDateTime parsedSessionEndDateTime = OffsetDateTime
				.parse(sessionEndDateTime, dateTimeFormatter4);


		// 4.3 print to console
		System.out.println("\nOriginal String is  = " + sessionEndDateTime);
		System.out.print("Parsed Date/time is = " + parsedSessionEndDateTime);
	}
}

Output:

Original String is  = 2017-03-06T08:29:59.987654321+05:30
Parsed Date/time is = 2017-03-06T08:29:59.987654321+05:30

Original String is  = 2019-06-28T17:30:01.123456789-09:30
Parsed Date/time is = 2019-06-28T17:30:01.123456789-09:30

Original String is  = 29-06-2017 11:29:45 am +04:00
Parsed Date/time is = 2017-06-29T11:29:45+04:00

Original String is  = 29.06.2017 05:59 pm +02:00
Parsed Date/time is = 2017-06-29T17:59+02:00

2. Parse java.util.Date :

  • Default format for java.util.Date is E MMM dd HH:mm:ss zzz yyyy
  • Parsing Date in custom formats is simple using DateFormat & SimpleDateFormat classes as shown in the below example
  • Use below date/time notation,
    1. a – for am/pm marker
    2. z – regional time-zone like IST or PST or CET
    3. XXX – for offset from GMT/UTC
    4. ss – seconds
    5. mm – minutes
    6. hh – 12-hour format
    7. HH – 24 hour format
    8. y/yyyy– year with all 4 digits
    9. yy – year with last 2 digits
    10. MM – month in numbers
    11. MMM – month in words in short form
    12. MMMM – month in words in full form
    13. dd – date
    14. E/EEE – day of week in short form
    15. EEEE – day of week in full form
  • Finally, print Date to the console for both default and custom formats

ParseDateTime.java

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

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class ParseDateTime {

	public static void main(String[] args) {

		// 1. current date
		Date date = new Date();
		System.out.println("Date/Time in "
				+ "default format :- \n" + date);


		// 2. date format
		DateFormat dateFormat =  new SimpleDateFormat("EEEE dd-MM-yyyy hh:mm:ss a z XXX");
		String str = dateFormat.format(date);
		System.out.println("\nFormatted Date/Time in "
				+ "(EEEE dd-MM-yyyy hh:mm:ss a z XXX) format :- \n" + str);


		// get default TimeZone
		TimeZone timeZone = TimeZone.getDefault();
		System.out.print("\nDefault TimeZone :- \n" + timeZone.getID());
	}
}

Output:

Date/Time in default format :- 
Tue Aug 16 16:01:03 IST 2022

Formatted Date/Time in (EEEE dd-MM-yyyy hh:mm:ss a z XXX) format :- 
Tuesday 16-08-2022 04:01:03 pm IST +05:30

Default TimeZone :- 
Asia/Calcutta

Related Articles:

References:

Happy Coding !!
Happy Learning !!

Java 8 – How to convert String to OffsetDateTime ?
Java 8 – How to form OffsetDateTime passing Instant and ZoneId ?