Almacenamiento de SQLite, recuperación y comparación de un campo DATETIME

Estoy realmente atrapado tratando de comparar las dates en consultas SQLite en el Objetivo C. Esto es lo que estoy haciendo:

Almacenamiento de la date:

Este documento me dice que use el formatting de date especificado a continuación, pero no parece correcto. Intenté usar yyyy-MM-dd hh:mm:ss sin éxito también.

 NSDate *today = [NSDate date]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"YYYY-MM-DD HH:MM:SS"]; NSString *dateString=[dateFormat stringFromDate:today]; NSString *query = [NSString stringWithFormat: @"INSERT INTO user (edited) VALUES (\"%@\")", dateString]; 

Comparando la date

Estoy usando una timestamp para esto, que me convierto a una cadena de date y hora

 long stamp = [sessie integerForKey:@"stamp"]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"YYYY-MM-DD HH:MM:SS"]; NSString *dateString = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:stamp]]; sqlite3_stmt *result = [db selectQuery:[NSString stringWithFormat:@"SELECT * FROM user WHERE edited > '%@'", dateString]]; 

La timestamp simplemente se genera utilizando [[NSDate date] timeIntervalSince1970] . El problema es que la consulta no dará los resultados correctos, y ni siquiera sé si la date se almacenó correctamente en primer lugar. ¡Cualquier ayuda sería muy apreciada!

Un par de observaciones:

  1. Para su cadena de date, definitivamente no desea usar YYYY-MM-DD HH:MM:SS . Eso no generará una cadena de date válida. Usando yyyy-MM-dd hh:mm:ss está mucho más cerca, pero tampoco del todo bien (ya que usará 12 horas hh ). Use yyyy-MM-dd HH:mm:ss lugar.

  2. Sin embargo, este formatting de date no captura la zona horaria, por lo tanto, si almacena cadenas de date en su database SQLite, debe usar UTC (GMT) como se describe en la documentation SQLite Date And Time Functions .

     NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; NSString *dateString = [formatter stringFromDate:today]; 

    Como se muestra arriba, probablemente también desee especificar la locale para que el formatting de las dates no cambie según la configuration de localización del dispositivo.

  3. Tenga en count que podría considerar usar timeIntervalSince1970 para almacenar la date como un valor REAL en su database (en lugar de un TEXT ). Esto puede ser un poco más eficiente y aborda automáticamente el problema de UTC.