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

时间:2019-08-26 10:32:58

标签: java timestamp jodatime

我正在尝试使用时区UTC将毫秒转换为Timestamp,但是它没有按预期工作,因为它转换为我的localdatetime。

我尝试了以下操作。在调试代码时,我发现执行此命令new DateTime(eventDate)可以正常工作,因为它的值为10:34:18.721,但是后来新的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

3 个答案:

答案 0 :(得分:0)

您可以尝试以下操作,

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 UTC

答案 1 :(得分:0)

我不明白为什么您要创建一个新的DateTime,然后从那里获取毫秒数(如果您已经在开始时有了毫秒数)。 也许我误会了你的问题。毫秒与时区无关。时区用于比较2个不同位置的同一时刻并获取相应的日期。这是我的解决方案

如果您希望使用毫秒作为时间戳记:

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());

我希望这些摘要可能有用。编程愉快!

答案 2 :(得分:0)

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

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