J'ai utilisé des données de base pour le faire: où le champ créé_at est défini comme type "date" dans le xcdatamodel. p> Quand j'exporte le SQL de La base de données SQLITE qu'il a créée, créée_at est définie comme type "horodatage" et les valeurs ressemblent: p> 290902422.72624 P> neuf chiffres avant le. Et puis une fraction. P> Quel est ce format? Ce n'est pas un temps époque et ce n'est pas au format Julianday. p> Epoch serait: p> 1269280338.81213 P> Julianday serait: p> 2455278.236746875 (remarquez seulement 7 chiffres avant le. pas 9 comme je avoir) p> Comment puis-je convertir un numéro comme 290902422.72624 en époque Time? Merci! P> p>
6 Réponses :
Premièrement, notez que la documentation de données principale indique que vous ne devez jamais toucher le SQL ou les valeurs qu'il génère à votre propre - cela pourrait donc invalider votre modèle si vous y appuyez des modifications, et il est difficile d'analyser dans la première Place.
Cela dit, ce que vous voyez peut-être est des dates par rapport au 1er janvier 2001 à GMT. La documentation de Nsdate a > Spécifie que la méthode primitive unique, exécutant votre valeur via une calculatrice produit: p> < PRE> XXX PRE> Ce qui concerne le nombre d'années écoulées depuis cette date de référence. p> Si vous devez vraiment analyser la valeur dans une époque d'époque, vous pouvez utiliser la méthode < Code> initwithTimeIntervalsincerenceferendeferendeFerenceDeFerenceDeFerence: code> avec votre numéro SQLite-stocké pour obtenir un nsdate, puis appelez TIMEITILTVERFERENCERENCERENDERENDATED CODE>, utilise ce temps pour sa référence. Les données de base, à son tour, utilisent le
nsdaeattributeType code> pour stocker les types de date, qui est défini comme un objet nsdate. P>
TIMEIVERSININCE1970 CODE> Pour récupérer des secondes EPOCH (dans une structure NSTIMEINTERVAL). P> P>
Réponse de Tim souffre de ce dont je parlais, changez votre "référencée" à "l'époque", puis sauvegardez vos dates de cette façon. Lorsque vous commencez à enregistrer vos données à une autre plate-forme, la vie sera beaucoup plus amusante à avoir fait ce changement.
@Kevindtimm: Depuis qu'il utilise des données de base, il sera difficile de convertir des formats de stockage de la date de convertir arbitrairement (à moins que tous les types Nsdate dans son modèle sont commutés sur Nsinteger, ou il passe à SQLite droite).
Je recommanderais de ne pas stocker le Nsdate, en stockant plutôt une nsdecimale de la valeur convertie, puis convertissez-la lors de la récupération. Mais, seulement si vous êtes assez sûr que les données devront être enregistrées sur un serveur central, où elles seront manipulées par d'autres systèmes.
Merci gars c'est exactement ça. Nombre de secondes depuis le 1er janvier 2001, GMT. Le problème ici est ici, je déplace l'application à la cire / Lua ( Github.com/probativementcorey/wax) et n'utilise plus les données de base. J'utilise directement l'API SQLITE, mais je dois honorer toutes les données existantes sur les téléphones de l'utilisateur.
Bonne réponse, et correct. Je suis allé à ce sujet la dure. Les dates de ma base de données (526546800) semblaient être d'environ 1/3 de l'époque actuelle de l'époque. Cela fait également environ 45 ans depuis 1970, j'ai donc supposé avoir utilisé le 1 er janvier 2000. J'ai écrit un certain code pour prendre le TimeInval et générer une date basée sur l'ajout des tiques sur les ticks 1/2000. Celles-ci étaient proches, mais pas assez étroites. S'avère que j'étais une année de congé et que Apple a fourni des fonctions intégrées pour cela.
J'ai rencontré un problème connexe d'essayer de comparer la date stockée de données de base à la date stockée MySQL dans une API distante. Ma solution consistait à utiliser les fonctions de date de SQLite pour convertir le temps: retours: p> sqlite suppose que la date est en heure locale et la convertit en UTC / GMT. Si vous voulez qu'il reste à l'heure locale, utilisez le modificateur d'heure locale: p> 1269209622
Pour ceux qui sont intéressés par la conversion des dates stockées dans les données de base vers Excel, j'ai proposé cette ForumLa Excel, je pense que c'est bien, cela pourrait être éteint d'une heure avec les trucs GMT si quelqu'un d'autre pourrait confirmer que ce serait cool < / p>
= (A1 / 86400) +35430.042 P>
Si vous essayez d'obtenir les données directement à partir de la ligne de commande SQLITE, vous feriez P>
Sélectionnez DateTime ('2001-01-01', DateColumn || 'secondes') à partir de la table; ou alors Sélectionnez DateTime ('2001-01-01', DatColumn || 'secondes', 'localtime') de table; p>
Voici un site Web qui vous permet de coller ces numéros de date et de vous indiquer la date réelle: http: // blog.paddlefish.net/?page_id=90
ou, voici comment lire ces dates SQLite avec ruby: p> remplacer 123 < / code> avec la valeur dans la colonne Date. P> P>
Et voici un alias à ajouter à votre .bstrc ou .zshrc: alias coredatatime = 'ruby -e "nécessite \" temps \ "; met le temps.parrse (\" 2001-01-01 00:00:00 - 0000 \ ") + argv [0] .to_i" ' code>. Ensuite, vous pouvez exécuter
coredaTatime 418766400 code> du terminal.
Il suffit d'ajouter 978307200 au nombre de données de base et vous obtiendrez un horodatage normal
NSString *coreDataTimestamp =@"464615485.832736"; //string of timestamp in coredata NSTimeInterval timestamp = [coreDataTimestamp doubleValue] + 978307200;
Si simple mais génie ;-) merci d'avoir fourni le numéro à ajouter
Tout d'abord, acceptez des réponses .....
Je suis à travers toutes les questions que j'ai posées et cliquée sur la coche à côté des bonnes réponses. Est-ce ce que tu veux dire?
Oui, et n'oubliez pas de continuer. Ce que vous devez faire est d'apprendre le format interne de Nsdate, ce n'est pas nécessairement pomme (exactement) mais les «propriétaires» de l'objectif-c. Découvrez cette information et vous aurez votre réponse.
Dans une autre réponse à une question similaire à celle-ci, la réponse acceptée était de sauvegarder les secondes depuis l'époque dans la DB au lieu d'une nsdate. Cela sera très utile si vous décidez de faire une plate-forme croisée.
Vous pouvez convertir la décimale trouvée dans la SQLite à une date de date réelle en utilisant epochconverter.com/coredata