Java 如何将Unix时间戳(以毫秒为单位)转换为与PostgreSQL兼容的时间戳?

Java 如何将Unix时间戳(以毫秒为单位)转换为与PostgreSQL兼容的时间戳?,java,postgresql,unix,timestamp,unix-timestamp,Java,Postgresql,Unix,Timestamp,Unix Timestamp,我有一个REST服务,其端点在请求的时间间隔内获取数据。请求的时间间隔是两个Unix时间戳,以毫秒为单位,类型为Long。像这样: Long start = 1622648253010; Long end = 1622651853010; 我有一个PostgreSQL数据库,它有一个带有时间戳列的表。我需要从时间戳位于两个Unix时间戳之间的表中选择一些数据。然而,PostgreSQL不理解Unix时间戳,因此在查询中使用它们之前,我必须将这两个时间戳转换为与PostgreSQL兼容的时间戳。

我有一个REST服务,其端点在请求的时间间隔内获取数据。请求的时间间隔是两个Unix时间戳,以毫秒为单位,类型为Long。像这样:

Long start = 1622648253010;
Long end = 1622651853010;
我有一个PostgreSQL数据库,它有一个带有时间戳列的表。我需要从时间戳位于两个Unix时间戳之间的表中选择一些数据。然而,PostgreSQL不理解Unix时间戳,因此在查询中使用它们之前,我必须将这两个时间戳转换为与PostgreSQL兼容的时间戳。转换应该在Java中完成,而不是在SQL查询中

我该怎么做?我知道的唯一方法是:

java.sql.Timestamp.from(Instant.ofEpochSecond(
                        start.getSeconds(), start.getNanos()))

但是这不起作用。

Long
类型没有方法
getSeconds()
getNanos()
。请参阅:

Long
类型没有方法
getSeconds()
getNanos()
。请参阅:

除以1000并使用时间戳)


除以1000并用于(时间戳)

java.time
java.util
Date-Time API及其格式化API
SimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到*

  • 将历元毫秒转换为偏移日期时间:
  • OffsetDateTime
    PreparedStatement
    一起使用:
  • 了解更多关于
    java.time
    、来自的*


    *无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。

    java.time
    java.util
    Date-Time API及其格式化API
    SimpleDataFormat
    已经过时,并且容易出错。建议完全停止使用,并切换到*

  • 将历元毫秒转换为偏移日期时间:
  • OffsetDateTime
    PreparedStatement
    一起使用:
  • 了解更多关于
    java.time
    、来自的*


    *无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。

    我建议您不要使用
    java.sql.Timestamp
    。那门课设计得很糟糕,而且早已过时。而是使用
    OffsetDateTime
    LocalDateTime
    ;两者都来自。
    1622648253100
    不是
    timestamp
    值,我建议您不要使用
    java.sql.timestamp
    。那门课设计得很糟糕,而且早已过时。而是使用
    OffsetDateTime
    LocalDateTime
    ;两者都来自。
    1622648253100
    不是
    时间戳
    select to_timestamp(1622648253010/1000);
          to_timestamp      
    ------------------------
     2021-06-02 17:37:33+02
    
    long millisStart = 1622648253010L;
    OffsetDateTime odtStart = Instant.ofEpochMilli(millisStart).atOffset(ZoneOffset.UTC);
    
    PreparedStatement st = conn.prepareStatement(SELECT * FROM mytable WHERE columnfoo BETWEEN ? AND ?");
    st.setObject(1, odtStart);
    st.setObject(2, odtEnd);
    ResultSet rs = st.executeQuery(); 
    while (rs.next()) {
       //...
    }
    rs.close();
    st.close();