Java 如何将Unix时间戳(以毫秒为单位)转换为与PostgreSQL兼容的时间戳?
我有一个REST服务,其端点在请求的时间间隔内获取数据。请求的时间间隔是两个Unix时间戳,以毫秒为单位,类型为Long。像这样: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兼容的时间戳。
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及其格式化APISimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到*
OffsetDateTime
与PreparedStatement
一起使用:java.time
、来自的*
*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。 java.time
java.util
Date-Time API及其格式化APISimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到*
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();