猿问

使用 UTC 将毫秒转换为时间戳

我正在尝试使用时区 UTC 将毫秒转换为时间戳,但它无法按预期工作,因为它转换为我的本地日期时间。


我尝试过以下。在调试代码时,我发现执行此命令时:new DateTime(eventDate)它工作正常,因为它的值是10:34:18.721,但后来 new Timestamp() 将其更改为 localdatetime。


long eventDate = 1566297258721L;

DateTimeZone.setDefault(DateTimeZone.UTC);

Timestamp timestamp = new Timestamp(new DateTime(eventDate).getMillis());

我期望输出为:2019-08-20 10:34:18.721 但实际输出为:2019-08-20 12:34:18.721


慕田峪9158850
浏览 364回答 3
3回答

犯罪嫌疑人X

您可以使用Java 8及更高版本的java.time包:ZonedDateTime zonedDateTime = Instant.ofEpochMilli(1566817891743L).atZone(ZoneOffset.UTC);

一只名叫tom的猫

我不明白为什么你要创建一个新的 DateTime,然后从那里获取毫秒(如果你一开始就已经有毫秒了)。也许我误解了你的问题。毫秒与时区无关。时区用于比较两个不同地点的同一时刻并获取各自的日期。这是我的解决方案如果你想要一个毫秒的时间戳:long eventDate = 1566297258721L;Timestamp time=new Timestamp(eventDate);System.out.println(time);结果将是2019-08-20 10:34:18.721,也是希望的 SQL 格式如果您想将某个时刻从一个时区转换为另一个时区:您将获得实际时区的时刻,并将其转换为不同的时区,以便查看其他国家/地区的时间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());我希望这些片段有用。快乐编程!

慕标5832272

您可以尝试以下操作,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);它给了我以下输出。2019-08-20 10:34:18 协调世界时
随时随地看视频慕课网APP

相关分类

Java
我要回答