问题CURRENT_TIMESTAMP in milliseconds讨论了如何在MySql
或PostgreSql
"中的时间戳中获得毫秒数。但是答案中的方法不起作用,因为H2不支持像conv
这样的MySQL方法。
我想使用CURRENT_TIMESTAMP
的变体作为我的架构文件的defaultValueComputed
。
如何在H2
中获取时间戳的精确毫秒数?我希望它是long
。我还希望返回的毫秒数在Unix time。
这是我的架构文件:
<column name="create_time" type="long" defaultValueComputed="?"
<constraints nullable="false"/>
</column>
我有这个DAO
对象:
public interface MyDao extends Transactional<MyDao> {
@SqlUpdate(
"INSERT INTO my_table "(id, create_time)" +
"VALUES (:id, :create_time)"
void insert(@BindBean MyObject myObject);
}
我查看了&#34;时间和日期函数&#34; http://www.h2database.com/html/functions.html的一部分并且无法找到任何可以做到这一点的事情,尽管PARSEDATETIME
可能会以某种方式起作用。
我将应用程序移植到最初为MySQL编写的H2 (查询包含一些特定于MySQL的语法)。可能是最多的 在H2上运行查询的挑战性部分一直是使用 MySQL日期函数的函数,如DATE(),UNIX_TIMESTAMP()和 FROM_UNIXTIME()。好消息是:因为H2支持创建 对于这些别名,我能够编写一个非常小的Java类 为H2实现这些MySQL函数,一旦我将它们别名化 在没有修改的情况下,H2运行几乎所有查询。
答案 0 :(得分:1)
我知道这是一个老问题,但是像我这样的人,可以搜索这个问题的答案。我们可以使用h2
DATEDIFF()
函数获取当前时间毫秒。
我们通过current_timestamp和第一个日期值并返回类型SECOND
作为参数,如:
DATEDIFF('SECOND', DATE '1970-01-01', CURRENT_TIMESTAMP()) * 1000
返回的结果对于我们来说是current_time的毫秒。
答案 1 :(得分:0)
我在这里尝试了其他答案,但它不准确-结果与实际的Unix时间戳之间存在微小差异。
但是,这似乎可行:
SELECT EXTRACT (EPOCH from CURRENT_TIMESTAMP()) * 1000
似乎在另一个答案中,我在本地时区获得了时间戳(在我的情况下为GMT + 3),因此它与Unix时间戳(以毫秒为单位)不同。在我的答案中,我得到的结果是UTC。