SQLite当前时间戳以毫秒为单位?

Tak*_*kun 24 sql sqlite

我在SQLite3列中存储了一个时间戳字段,TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP我想知道是否有任何方法可以在时间戳中包含毫秒数?

LS_*_*ᴅᴇᴠ 32

而不是CURRENT_TIMESTAMP使用,(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW'))以便您的列定义变为:

TIMESTAMP DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW'))
Run Code Online (Sandbox Code Playgroud)

例如:

CREATE TABLE IF NOT EXISTS event
(when_ts DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')));
Run Code Online (Sandbox Code Playgroud)


Nik*_*nko 19

要获得自纪元以来的毫秒数,您可以使用julianday()一些额外的计算:

-- Julian time to Epoch MS     
SELECT CAST((julianday('now') - 2440587.5)*86400000 AS INTEGER); 
Run Code Online (Sandbox Code Playgroud)

  • 我希望有一种更直观的方式. (4认同)
  • 添加 ROUND 以获得更准确的千分位:CAST(ROUND((julianday('now') - 2440587.5)*86400000) As INTEGER) (2认同)

Dav*_*arx 8

这是一个查询,它将生成一个带有毫秒的字符串的时间戳:

 select strftime("%Y-%m-%d %H:%M:%f", "now"); 
Run Code Online (Sandbox Code Playgroud)

如果你真的想要使用数字表示,你可以使用:

select julianday("now"); 
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,julianday() 本质上不能与基于纪元时间的任何内容进行比较,无论是秒还是毫秒。您必须在代码中的所有位置进行转换。 (3认同)

Mic*_*ael 6

以下方法不需要任何乘法或除法,并且应始终产生正确的结果,因为在单个查询中多次调用 get 'now' 应始终返回相同的结果:

SELECT strftime('%s','now') || substr(strftime('%f','now'),4);
Run Code Online (Sandbox Code Playgroud)

生成秒数并将其连接到当前秒 + 毫秒的毫秒部分。


Ada*_*amy 5

接受的答案只给你 UTC。如果您需要本地时间而不是 UTC,请使用:

strftime('%Y-%m-%d %H:%M:%f', 'now', 'localtime')
Run Code Online (Sandbox Code Playgroud)