简体   繁体   中英

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

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

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 eg 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!

您可以使用Java 8及更高版本的java.time包

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM