BoomRamada
BoomRamada

Reputation: 141

SimpleDateFormat not formatting offset date time correctly

I got a timestamp as follows, 2019-10-17T07:10:39.021+10:30 but when I parse through the SimpleDateFormat then print again, it appear as 2019-10-17T07:40:39.021+11:00

Looks like it added the 30min to time then change the time zone. Is there is a way to fix that.

        Date date = null;       
        String value = "2019-10-17T07:10:39.021+10:30";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.getDefault());       
        System.out.println("input :" + value);
        try {
            date = sdf.parse(value);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("output :" + sdf.format(date));

Result

input :2019-10-17T07:10:39.021+10:30

output :2019-10-17T07:40:39.021+11:00

Should be same as input.

Upvotes: 1

Views: 3986

Answers (2)

Ryuzaki L
Ryuzaki L

Reputation: 40068

The date string you have 2019-10-17T07:10:39.021+10:30consists of offset, so from java-8 you can use OffsetDateTime

A date-time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 2007-12-03T10:15:30+01:00.

OffsetDateTime dateTime = OffsetDateTime.parse(date);

System.out.println(dateTime.toString());   //2019-10-17T07:10:39.021+10:30

Upvotes: 2

Jerin Joseph
Jerin Joseph

Reputation: 1097

Why are you using Locale.getDefault(), that parameter is not necessary. Can you try just calling it as below,

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

Upvotes: 0

Related Questions