J'ai une base de données SQLite que j'utilise en tant qu'employ d'emploi ADO.NET pour mes travaux de planification Quartz.net. Dans une table, une colonne appelée start_time est de type gros int. p>
Y a-t-il un moyen de lancer ou de convertir un Bigint à une valeur de date? J'aimerais pouvoir interroger la base de données pour voir quels travaux sont programmés à quelle date / heure et une valeur telle que 633869892000000000 n'a pas de sens. P>
Merci! P>
5 Réponses :
En supposant que voir http://www.sqlite.org/lang_datefunc.html , section" Modificateurs ". P> P> start_time code> est la standard second secondes - depuis-unix-époch, vous pouvez utiliser:
C'est des centaines de nanosecondes (1 NS = 1/10 ^ 9 seconde) du début de l'âge ordinaire (CA) ou de Noël. Pour convertir la date de ce format à la date normale: p>
1. Tout d'abord, vous devez convertir 633869892000000000 = YourDateHundredsofnanosecondsca de 100'nanosecondes vers le format UnixEpoch (secondes depuis le 1er janvier 1970 à votre date) par formule: p>
(YourDateHundredsofnanosCondsCa- (rond (1969 * (365 + 1 / 4-1 / 100 + 1/400), 0) -2) * 24 * 60 * 60 * 1E9 / 100) * 100 / 1E9, p>
où: p>
1.1 rond (1969 * (365 + 1 / 4-1 / 100 + 1/400), 0) -2) = DaysOf1970Years - Compte rond de Jasus Né jusqu'en janvier, 1 1970. P>
1.2 CENTSOFNANOSECONDSOF1970YEARS = DaysOf1970Years * 24 * 60 * 60 * 1E9 / 100 - des centaines de nanosecondes du début de l'âge ordinaire jusqu'au début de l'époque Unix (1er janvier 1970). P>
1.3 YourDateinunixEpochseconds = (YourdateHundredsofnanosecondsca-centsofnanosecondsof1970Years) * 100 / 1E9 - Nombre de secondes à partir du 01/01/1970 jusqu'à votre date. P>
2. Convertissez la date de format de l'époque UNIX au format lisible par fonction (je donne l'exemple de SQLite): P>
Sélectionnez DateTime (YourDATEINUNIXIXEPOCHSECONDS, 'UNIXEPOCH'); P>
Pour votre exemple, vous pouvez copier cette chaîne en éditeur de requête SQL dans SQLITEStudio et exécuter: P>
Sélectionnez DateTime ((633869892000000000- (rond (1969 * (365 + 1 / 4-1 / 100 + 1/400), 0) -2) * 24 * 60 * 60 * 1E9 / 100) * 100 / 1E9 , 'Unixepoch'); P>
Et en conséquence, vous obtiendrez '2010-12-19 17:00:00' p>
Pour moi, cette déclaration - Sélectionnez DateTime ((DaColumn- (rond (1969 * (365 + 1/4-1 / 100 + 1/400), 0) -2) * 24 * 60 * 60 * 1E9 / 100) * 1 00 / 1e9, "Unixepoch") de votre carte; - Construisez les dates d'une année à venir. Mais cette deuxième déclaration suggérée par @gizboy semblait avoir travaillé bien (et elle est aussi un peu plus propre) - Sélectionnez DateTime (DatColumn / 10000000 - 62135596800, 'Unixepoch') de votre carte; Merci quand même!
Cela semblait travailler pour moi; Sélectionnez DateTime (DateColumn / 10000000 - 62135596800, 'UNIXEPOCH') de votre carte P>
crédits à; https://forums.xamarin.com/discussion/54282 / SQLite-DateTime-Convert-to-Net-DateTime P>
Cette date est stockée sous forme de ticks. Le lien suivant couvre un peu plus de détails sur les tiques.
Pour convertir les tiques en date de la date, vous pouvez utiliser SQL Query comme P>
DateTime dt = new DateTime(633869892000000000); //output: 2009-08-27âT17:00:00
Cette solution ne me donne qu'une colonne de valeurs vides: p>
Sélectionnez DateTime (TIMESTMP, 'UNIXEPOCH') à partir de Logging_Event P>