129 votes

Comment fonctionnent les valeurs DATETIME dans SQLite ?

Je crée des applications Android et j'ai besoin de sauvegarder la date et l'heure de l'enregistrement de la création. La documentation de SQLite indique cependant que "SQLite n'a pas de classe de stockage réservée au stockage des dates et/ou des heures" et qu'il est "capable de stocker les dates et les heures sous forme de valeurs TEXT, REAL ou INTEGER".

Y a-t-il une raison technique d'utiliser un type plutôt qu'un autre ? Et une seule colonne peut-elle stocker des dates dans l'un des trois formats d'une ligne à l'autre ?

Je devrai comparer les dates plus tard. Par exemple, dans mes applications, je vais afficher tous les enregistrements créés entre la date A et la date B. Je crains que l'absence d'une véritable colonne DATETIME ne rende les comparaisons difficiles.

93voto

neo108 Points 2741

SQlite ne dispose pas d'un type de date spécifique. Vous pouvez utiliser TEXT , REAL o INTEGER types, selon ce qui vous convient.

Tout droit sorti des studios de cinéma

SQLite ne dispose pas d'une classe de stockage réservée au stockage des dates et/ou des heures. Au lieu de cela, les fonctions intégrées de date et d'heure de SQLite sont capables de stocker des dates et des heures sous forme de valeurs TEXT, REAL ou INTEGER :

  • TEXTE sous forme de chaînes de caractères ISO8601 ("AAAA-MM-JJ HH:MM:SS.SSS").
  • RÉEL en tant que nombres de jours juliens, le nombre de jours depuis midi à Greenwich le 24 novembre 4714 avant J.-C. selon le calendrier grégorien proleptique.
  • INTEGER comme Unix Time, le nombre de secondes depuis 1970-01-01 00:00:00 UTC.

Les applications peuvent choisir de stocker les dates et les heures dans l'un de ces formats et de les convertir librement à l'aide des fonctions de date et d'heure intégrées.

Les fonctions de date et d'heure intégrées à SQLite peuvent être trouvé ici .

20voto

dtmilano Points 26472

SQLite ne dispose pas d'une classe de stockage réservée au stockage des dates et/ou les heures. Au lieu de cela, les fonctions intégrées de date et d'heure de SQLite sont capables de stocker les dates et les heures sous forme de TEXT, REAL, ou INTEGER. ou INTEGER :

TEXTE sous forme de chaînes ISO8601 ("AAAA-MM-JJ HH:MM:SS.SSS"). REAL en tant que nombres de jours le nombre de jours depuis midi à Greenwich le 24 novembre 4714 av. 24 novembre 4714 avant J.-C., selon le calendrier grégorien proleptique. INTEGER en tant que temps Unix, le nombre de secondes depuis 1970-01-01 00:00:00 UTC. Les applications peuvent choisir de stocker les dates et les heures dans l'un de ces et convertir librement les formats à l'aide des fonctions intégrées de date et d'heure. fonctions de date et d'heure intégrées.

Cela dit, j'utiliserais INTEGER et stocke les secondes depuis l'époque Unix (1970-01-01 00:00:00 UTC).

20voto

Zso Points 350

L'une des fonctionnalités puissantes de SQLite est de vous permettre de choisir le type de stockage. Avantages/inconvénients de chacune des trois possibilités différentes :

  • Chaîne ISO8601

    • La comparaison des chaînes de caractères donne des résultats valides
    • Stocke les fractions de secondes, jusqu'à trois chiffres décimaux.
    • Besoin de plus d'espace de stockage
    • Vous verrez directement sa valeur lorsque vous utiliserez un navigateur de base de données.
    • Nécessité de l'analyse syntaxique pour d'autres utilisations
    • Le modificateur de colonne "default current_timestamp" stockera en utilisant ce format
  • Nombre réel

    • Haute précision concernant les fractions de secondes
    • Plage de temps la plus longue
  • Nombre entier

    • Espace de stockage le plus faible
    • Opérations rapides
    • Petit intervalle de temps
    • Problème possible en 2038

Si vous avez besoin de comparer différents types ou d'exporter vers une application externe, vous êtes libre d'utiliser l'outil SQLite fonctions de conversion de date et d'heure propres si nécessaire.

7voto

koem Points 118

Stockez-le dans un champ de type long . Voir Date.getTime() y new Date(long)

7voto

KelvinEWilliams Points 21

Pour pratiquement toutes les questions de date et d'heure, je préfère simplifier les choses, très, très simplement... Jusqu'aux secondes stockées dans des entiers.

Les entiers seront toujours pris en charge en tant qu'entiers dans les bases de données, les fichiers plats, etc. Il suffit de faire quelques calculs et de les convertir en un autre type pour pouvoir formater la date comme on le souhaite.

De cette façon, vous n'avez pas à vous inquiéter lorsque [insérer la base de données favorite actuelle ici] est remplacée par [la future base de données favorite] qui, par coïncidence, n'utilise pas le format de date que vous avez choisi aujourd'hui.

Il s'agit juste d'une petite surcharge mathématique (ex. méthodes - cela prend deux secondes, je posterai un résumé si nécessaire) et simplifie les choses pour beaucoup d'opérations concernant la date et l'heure par la suite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X