Convert OffsetDateTime to SQL TimeStamp

Convert OffsetDateTime to SQL TimeStamp

0 Comments

Last Updated on May 2, 2021 by jt

Java 8 introduces a new date and time API defined inside the java.time package. The key date and time classes defined in this package are LocalDateTime, ZonedDateTime, and OffsetDateTime.

OffsetDateTime is an immutable representation of a date-time with an offset from UTC. It stores all date and time fields, to a precision of nanoseconds. For example, you can store the value 20th January 2021 at 10:35.40.123456789 +03:00 in OffsetDateTime.

In my previous post Convert OffsetDateTime to LocalDateTime, I explained how to convert OffsetDateTime to LocalDateTime.

I also have a post to convert OffsetDateTime to ZonedDateTime.

In this post, I will discuss how to convert OffsetDateTime to SQL TimeStamp.

java.sql.Timestamp extends java.util.Date class. This class represents a SQL TIMESTAMP to store timestamps in database. An example of a timestamp is 2021-01-20 15:22:33.9441128.

Approach 1: Converting OffsetDateTime to SQL TimeStamp

The code to convertOffsetDateTime to TimeStamp is this.

public Timestamp asTimestamp(OffsetDateTime offsetDateTime) {
System.out.println("OffsetDateTime: "+offsetDateTime);

if (offsetDateTime != null) {
     return Timestamp.valueOf(offsetDateTime.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());
    }
else
     return null;
}

In the preceding code,TimeStamp.value() gets the timestamp value from offsetDateTime and converts it to UTC.

Let’s call this method from the main class.

DateConverter dateConvertor = new DateConverterImpl();
OffsetDateTime offsetDateTime = OffsetDateTime.now();
System.out.println("SqlTimestamp: "+dateConvertor.asTimestamp(offsetDateTime));

In the preceding code, OffsetDateTime.now() gets the current date-time in the default time-zone with an offset. Then, the asTimestamp() method of DateConverter is called passing the OffsetDateTime to obtain a Timestamp.

On running the application, the output is this.

timestampzone function

Approach 2: Converting OffsetDateTime to SQL TimeStamp

Next, I will convert offsetdatetime to timestamp with ZoneId.of() method to get the timestamp of any particular time zone.

This is the code.

public Timestamp timestampZone(OffsetDateTime offsetDateTime) {
if (offsetDateTime!=null)
     return Timestamp.valueOf(offsetDateTime.atZoneSameInstant(ZoneId.of("Asia/Shanghai")).toLocalDateTime());
else
     return null;
}

Now, let’s call this method.

System.out.println("Timestamp : "+dateConvertor.timestampZone(offsetDateTime));

On running the application, you will get the timestamp at that time of time-zone “Asia/Shanghai” as shown in the following output figure.

using zoneid method

Approach 3: Converting OffsetDateTime to SQL TimeStamp

The code to convert offsetdatetime to timestamp is this.

public Timestamp timestampDate(OffsetDateTime offsetDateTime){
if(offsetDateTime!=null)
    return Timestamp.valueOf(OffsetDateTime.now().toLocalDate().atStartOfDay());
else
    return null;
}

In Line 3 toLocalDate().atStartOfDay() gets the timestamp value as the date and time as all zeroes.

Let’s call this method.

System.out.println(dateConvertor.timestampDate(offsetDateTime)); 

The output for the preceding code is this.

tolocaldate() method used

You can find the source code for this post here on Github.

About SFG Contributor

Staff writer account for Spring Framework Guru

    You May Also Like

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.