JAVA 从 ISO_DATE_TIME 获取自纪元以来的毫秒数

JAVA Get Milliseconds since Epoch from ISO_DATE_TIME

我正在尝试从 ISO_DATE_TIME 获取自 Epoch 以来的毫秒数,我已经阅读了很多文章。

我的出发点是这样的:2020-10-06T11:51:45.964+01:00

我的终点是考虑毫秒的long。 (https://currentmillis.com/)

我正在使用从 Kafka 到 Flink 的消息,时间戳在消息的有效负载中。

这是我的代码:

public void setKafkaTime(String kafkaTime) {
    DateTimeFormatter sdr = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXXX");
    LocalDateTime MydateTime = LocalDateTime.parse(kafkaTime,sdr);
    NOT WORKING -> Date date = Date.from(MydateTime.toInstant(ZoneOffset.UTC));
    Long tn = date.getTime();
    this.time = tn;
}

关于该主题的内容太多了,我尝试了很多方法,从 Java 文档开始:

https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_OFFSET_DATE_TIME 但是我的不是 ISO-8601 标准,因为我有秒和毫秒。

我一直在使用以前问题中的一些重要提示,例如这个问题,我在其中找到了模式 Java string to date conversion 我得到了这个很好的 table。

要使用 .getTime() 我需要一个 java.util.Date 来将 LocalDateTime 转换为 Date 我遇到了一个错误,要求我输入 Java.sql.Date.

我一直在阅读两者之间的区别,据我了解Java.sql没有考虑时间,所以我绝对不应该使用它。

java.util.Date vs java.sql.Date

我对代码的前两行很有信心,其余的我都在努力。我真的不知道如何获得一个long。任何帮助将不胜感激。

谢谢

试试这个。我使用了分区时间,然后将其转换为瞬间以获得毫秒数。

public  void setKafkaTime(String kafkaTime) {
    DateTimeFormatter sdr = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSzzz");
    ZonedDateTime MydateTime = ZonedDateTime.parse(kafkaTime,sdr);
    this.time = MydateTime.toInstant().toEpochMilli();
}