J'utilise des données de base dans mon application iphone, mais dans certains cas, j'utilise sqlite pour accéder aux données et j'ai un problème avec NSDate.iphone sqlite NSDate bug
NSDate *now = [NSDate date];
NSCalendar *calender = [NSCalendar currentCalendar];;
NSDateComponents *comp = [calender components:NSYearCalendarUnit fromDate:now];
[comp setDay:1];
[comp setMonth:1];
NSDate *yearAgo = [calender dateFromComponents:comp];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date > %@",yearAgo];
Ce code fonctionne et les enregistrements de sélection depuis le début de l'année, mais si j'utilise la requête brute sqlite
NSDate *current=[NSDate date];
NSDateComponents *comps = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit |NSYearCalendarUnit) fromDate:current];
[comps setDay:1];
[comps setMonth:1];
NSDate *yearDate = [gregorian dateFromComponents:comps];
[where appendFormat:@"zdate > '%@' ",yearDate];
J'ai un problème, une mauvaise date déterminée par les enregistrements, enregistrements que la date de base A une date comme 2008-01-01 en sqlite ont des dates comme 1977 année. Comment le corriger? Peut-être que j'avais tort d'utiliser NSDate dans la requête?
NSDate utilise le format "AAAA-MM-JJ HH: MM: SS ± HHMM"; SQLite accepte "AAAA-MM-JJ HH: MM: SS", entre autres. Je ne pense pas que le fuseau horaire aura un effet sauf si la date et l'heure sont identiques, bien que le fait que toutes les dates dans SQLite soient en UTC signifie qu'elles ne peuvent pas être comparées correctement aux NSDates locales (sauf si vous habitez en GMT). – outis
Pour clarifier: les différents formats n'auront aucun effet sur la requête de l'OP. En général, cela aura un effet dans le sens où une date NSDate et SQLite ne sera jamais comparable. – outis