Este es un ejemplo completo basado en las otras respuestas y comentarios a la pregunta. En el ejemplo, la marca de tiempo (created_at
-column) se guarda como unix epoch zona horaria UTC y se convierte a la zona horaria local solo cuando es necesario.
El uso de Unix epoch ahorra espacio de almacenamiento - 4 bytes enteros contra cadena de 24 bytes cuando se almacenan como cadenas ISO8601, consulte datatypes. Si 4 bytes no son suficientes, se puede aumentar a 6 u 8 bytes.
La marca de tiempo de ahorro en la zona horaria UTC hace que sea conveniente mostrar un valor razonable en varias zonas horarias.
La versión de SQLite es 3.8.6 que se envía con Ubuntu LTS 14.04.
$ sqlite3 so.db
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> .headers on
create table if not exists example (
id integer primary key autoincrement
,data text not null unique
,created_at integer(4) not null default (strftime('%s','now'))
);
insert into example(data) values
('foo')
,('bar')
;
select
id
,data
,created_at as epoch
,datetime(created_at, 'unixepoch') as utc
,datetime(created_at, 'unixepoch', 'localtime') as localtime
from example
order by id
;
id|data|epoch |utc |localtime
1 |foo |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02
2 |bar |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02
Localtime es correcta Estoy ubicado en el horario de verano UTC + 2 en el momento de la consulta.
Si le preocupa el tamaño de almacenamiento, tenga en cuenta que esta receta guardará sus marcas de tiempo en ISO-8601 (un formato de texto), ocupando aproximadamente 24 bytes en la base de datos por fecha.Puede ahorrar espacio simplemente usando una columna INTEGER (4) y almacenando el tiempo de Unix mediante "INSERT INTO test (t) values (strftime ("% s ", CURRENT_TIME));" – mckoss
@mckoss gracias a su comentario, la declaración de creación se convirtió en: ... mycolumn default (strftime ('% s', 'now')) – larham1
"... predeterminado (strftime ('% s', 'now')) "no es una expresión constante, no funcionará con la entrega predeterminada" Error: el valor predeterminado de la columna [...] no es constante ". –