kamboj
kamboj

Reputation: 411

Convert milliseconds to timestamp with UTC

I'm trying to convert milliseconds to Timestamp with timezone UTC but it doesn't work as is expected because it convert to my localdatetime.

I have tried following. While debugging the code I have found that when execute this: new DateTime(eventDate) it is working properly because it's value is 10:34:18.721 but later new Timestamp() change it to localdatetime.

long eventDate = 1566297258721L;
DateTimeZone.setDefault(DateTimeZone.UTC);
Timestamp timestamp = new Timestamp(new DateTime(eventDate).getMillis());

I expect to output as:2019-08-20 10:34:18.721 but actual output is: 2019-08-20 12:34:18.721

Upvotes: 5

Views: 5251

Answers (3)

Harsh
Harsh

Reputation: 350

You can use java.time package of Java 8 and later:

ZonedDateTime zonedDateTime = Instant.ofEpochMilli(1566817891743L).atZone(ZoneOffset.UTC);

Upvotes: 4

Andrea
Andrea

Reputation: 1316

I don't understand why you are creating a new DateTime and then get the milliseconds from there, if you already have the milliseconds in the beginning. Maybe I'm misunderstanding your problem. The milliseconds have nothing to do with the timezone. The timezone is used to compare the same moment in 2 different places and get the respective date. Here are my solutions

If you want a timestamp from milliseconds:

long eventDate = 1566297258721L;
Timestamp time=new Timestamp(eventDate);
System.out.println(time);

The result would be 2019-08-20 10:34:18.721 , also the wished SQL format

If you want to convert a moment from a Timezone to another:

You will get the moment in your actual timezone and transform it in a different one in order to see e.g. what time it was in an other country

long eventDate = 1566297258721L;
Calendar calendar = Calendar.getInstance();
calendar.setTime(eventDate);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
dateFormat.format(calendar.getTime());

I hope those snippets could be useful. Happy Programming!

Upvotes: 1

Hasitha Jayawardana
Hasitha Jayawardana

Reputation: 2436

You can try the following,

long eventDate = 1566297258721L;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String stringDate = simpleDateFormat.format(new Date(eventDate));
System.out.println(stringDate);

It gives me the following output.

2019-08-20 10:34:18 UTC

Upvotes: 0

Related Questions