2013-07-10 14 views
17

Sto memorizzando un campo di timestamp in una colonna SQLite3 come TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP e mi chiedevo se c'era un modo per includere anche millisecondi nel timestamp?Timestamp corrente SQLite con millisecondi?

+0

TIMESTAMP è il numero di secondi che sono passati dal 1 gennaio 1970 in modo da immagino avrete bisogno di un'altra campo per millisecondi – fsw

+0

Il tempo POSIX è definito come millisecondi trascorsi dalla mezzanotte del 01 gennaio 1970 UTC. Direi che usare millisecondi come timestamp è ok finché sei sicuro che sia tempo POSIX (cioè in UTC). Altrimenti, l'uso di millisecondi per le marche temporali locali è molto insolito e dovresti invece utilizzare altri formati temporali numerici. Vedi: http://stackoverflow.com/questions/32670064/how-do-i-get-posix-time-utc-from-a-serial-value-local-date-time-with-the-java – scottb

risposta

24

Invece di CURRENT_TIMESTAMP, utilizzare (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) in modo che la definizione della colonna diventano:

TIMESTAMP DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) 

Per esempio:

CREATE TABLE IF NOT EXISTS event 
(when_ts DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW'))); 
+0

Con Oracle lo sfondo '% f' sembra strano da solo, è lo stesso di Oracle' TO_DATE (... SS.FFF ') ' – TWiStErRob

8

Ecco una query che genererà un timestamp come una stringa con millisecondi:

select strftime("%Y-%m-%d %H:%M:%f", "now"); 

Se sei veramente intenzionato a utilizzare una rappresentazione numerica, è possibile utilizzare:

select julianday("now"); 
14

per ottenere il numero di millisecondi dal periodo è possibile utilizzare julianday() con alcune ulteriori calcoli:

SELECT CAST((julianday('now') - 2440587.5)*86400000 AS INTEGER) 
+1

Vorrei che ci fosse un modo leggermente più intuitivo. – dakab

Problemi correlati