I am using the below code for epoch to time conversion by using java.util.Date
class in Java.
Long scheduledTime = 1602258300000L;
Date date = new Date(scheduledTime);
System.out.println("Date obj :" + date);
Below are the outputs while running the same code on two different timezone server :
On EDT server-
Date obj :Fri Oct 09 11:45:00 EDT 2020
On IST server -
Date obj :Fri Oct 09 21:15:00 IST 2020
Why does this happen? I am only passing milliseconds. This data is supposed to be treated as 21:15 on all servers. Why does Date class change the data?
Please share a sample piece of code for getting the same time data regardless of the timezone of the server.
java.time
I recommend you use java.time, the modern Java date and time API, for your date and time work.
Output from this snippet will be the same on all servers in all time zones:
Since you want 21:15, specify the time zone for India:
What went wrong?
The epoch is one point in time independent of time zone. so a count of milliseconds also denotes one point in time. In your case that point in time is Friday 9. October 2020 15:45:00 UTC. And at that point in time it was 21:15 in India and 11:45 on the East coast of North America. It’s a confusing trait of the outdated
Date
class that on one hand it represents just a point in time, on the other hand itstoString
method grabs the time zone setting of the JVM and uses it for rendering the string to be returned, thus giving you the false impression that you get differentDate
objects in different time zones when in fact they are equal.Links