How to use DateTimeZone in Java

Viewed 19397

I've been trying to convert a server's date and time to user's one with the following code

@Test
public void playingWithJodaTime() {

    LocalDateTime localDateTime = new LocalDateTime();
    System.out.println("server localDateTime : "
            + localDateTime.toDateTime(DateTimeZone.getDefault()).toDate());
    System.out.println("user's localDateTime : "
            + localDateTime.toDateTime(DateTimeZone.forID("Asia/Jakarta"))
                    .toDate());
}

Printed result

server localDateTime : Tue Dec 17 00:04:29 SGT 2013
user's localDateTime : Tue Dec 17 01:04:29 SGT 2013

However the printed result is not like what I expected since the server time zone is (UTC+08:00) Kuala Lumpur, Singapore while the user's is (UTC+07:00) Bangkok, Hanoi, Jakarta.

What did I do wrong here ?

4 Answers

For me this code did the job.

    DateTime dt =DateTime.now();
    System.out.println(dt);

    dt =DateTime.now().withZone(DateTimeZone.forID("Asia/Jakarta"));
    System.out.println(dt);

    dt =DateTime.now().withZone(DateTimeZone.forID("Europe/London"));
    System.out.println(dt);

Where classes are

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDateTime;

Output is :

2018-07-17T14:30:51.744+05:30
2018-07-17T16:00:51.829+07:00
2018-07-17T10:00:51.830+01:00
Related