J'ai une table sqlite (v3) avec cette définition de colonne:
"timestamp" DATETIME DEFAULT CURRENT_TIMESTAMP
Le serveur sur lequel cette base de données vit se trouve dans le fuseau horaire CST. Lorsque j'insère dans ma table sans inclure la colonne d'horodatage, sqlite remplit automatiquement ce champ avec l'horodatage actuel en GMT, pas CST.
Existe-t-il un moyen de modifier mon instruction d'insertion pour forcer l'horodatage stocké à être dans CST? D'un autre côté, il est probablement préférable de le stocker en GMT (au cas où la base de données serait déplacée vers un fuseau horaire différent, par exemple), y a-t-il donc un moyen de modifier mon SQL sélectionné pour convertir l'horodatage stocké en CST lorsque je l'extraire de la table?
Réponses:
J'ai trouvé sur la documentation sqlite ( https://www.sqlite.org/lang_datefunc.html ) ce texte:
Cela ne semblait pas répondre à mes besoins, alors j'ai essayé de changer un peu la fonction "datetime" et je me suis retrouvé avec ceci:
Cela semble fonctionner - est-ce la bonne façon de convertir votre fuseau horaire ou y a-t-il une meilleure façon de le faire?
la source
utilisez simplement l'heure locale par défaut:
la source
Vous devez, en règle générale, laisser les horodatages dans la base de données au format GMT et les convertir uniquement vers / depuis l'heure locale en entrée / sortie, lorsque vous pouvez les convertir en horodatage local de l'utilisateur (et non du serveur).
Ce serait bien si vous pouviez faire ce qui suit:
... pour afficher l'horodatage d'un utilisateur à l'heure avancée du Pacifique. Malheureusement, cela ne fonctionne pas. Cependant, selon ce didacticiel SQLite (faites défiler jusqu'à «Autres commandes de date et d'heure»), vous pouvez demander l'heure, puis appliquer un décalage (en heures) en même temps. Donc, si vous connaissez le décalage du fuseau horaire de l'utilisateur, vous êtes bon.
Ne traite pas des règles d'heure d'été, cependant ...
la source
Dans le cas (rare admis) où une heure de données locale est souhaitée (par exemple, je stocke l'heure locale dans l'une de mes bases de données, car tout ce qui m'importe, c'est l'heure de la journée et je ne garde pas trace de l'endroit où j'étais en terme de fuseaux horaires ...), vous pouvez définir la colonne comme
La partie% Y-% m-% dT% H:% M est bien entendu optionnelle; c'est ainsi que j'aime que mon temps soit stocké. [De plus, si mon impression est correcte, il n'y a pas de type de données "DATETIME" dans sqlite, donc peu importe si TEXT ou DATETIME est utilisé comme type de données dans la déclaration de colonne.]
la source
Lorsqu'une colonne est définie avec "
NOT NULL DEFAULT CURRENT_TIMESTAMP
," les enregistrements insérés seront toujours définis avec l'heure UTC / GMT.Voici ce que j'ai fait pour éviter d'avoir à inclure l'heure dans mes instructions INSERT / UPDATE:
Testez pour voir si cela fonctionne ...
J'espère que cela pourra aider.
la source
la source
SELECT datetime(CURRENT_TIMESTAMP, 'localtime')
la source
Vous pouvez également simplement convertir la colonne de temps en un horodatage en utilisant strftime ():
Vous donne:
La colonne de table 'timestamp' peut être un champ de texte même, en utilisant
current_timestamp
comme DEFAULT.Sans délai:
Vous donne:
la source
Je pense que cela pourrait aider.
la source
L'heure actuelle, dans le fuseau horaire de votre machine:
Selon http://www.sqlite.org/lang_datefunc.html
la source
Time ( 'now', 'localtime' )
et Date( 'now', 'localtime' )
fonctionne.la source