2008-11-19 21 views
7

Tengo una tabla sqlite3 que estoy tratando de asignar a un objeto en Object-C. Un atributo de la tabla es 'completed_at' que se almacena como DATETIME.Objective-C y sqlite's DATETIME tipo

Quiero crear una propiedad en mi clase objetivo-C (que hereda de NSObject) que se correlacionará bien con el atributo 'completed_at'.

Objective-C tiene un tipo NSDate pero no estoy seguro de si eso se asignará directamente?

Respuesta

4

Tengo cero experiencia con Objective-C, pero encontré el NSDate Class Reference de Apple con una búsqueda en Google. Con la información provista en la página enlazada, debería ser capaz de descubrir cómo manipular épocas de 32 bits en Objective-C, y esto funcionaría bien en SQLite. Probablemente crearía la columna completed_at como tipo INTEGER para tiempos de 32 bits.

SQLite realmente prefiere las fechas julianas, que son flotadores. No he encontrado ninguna documentación que explique cómo se puede obligar a la clase NSDate a trabajar con Julians.

timeIntervalSince1970 parece muy interesante.

+0

timeIntervalSince1970 funciona para mí – amrox

+0

De hecho, esta es la asignación correcta pero tenga en cuenta que SQLite no impone una restricción sobre los tipos que llevará a cabo, pero utiliza tipos simplemente como sugerencias. – wisequark

2

El formateador es importante si usted está tratando de efectuar la presentación, pero si se utiliza si para el almacenamiento interno, que está definiendo una cadena que puede anule la capacidad del motor de DB para usar el valor para computación, comparación, clasificación, etc. Además, si va a tener diferentes clientes insertando el valor de fecha en el DB, tendrá que escribir funciones de conversión en todas partes. He utilizado el siguiente y funcionó como (columna del esquema definido como DATETIME) que se espera:

dateExpires = [NSDate dateWithTimeIntervalSinceNow: sqlite3_column_double(queryStmt, 5)]; 

me inserta en la base de datos sqlite3 con el complemento de Firefox como "4/12/2010" aquí en la zona horaria central. Visualización del valor de '' dateExpires en XCode-depurador que se muestran como:

2010-04-12 23:19:48 -0500 

Efectivamente, ese es el momento correcto.

Además, para insertar en el SQLITE DB va a poner el valor [NSDate date]

28

estoy compartiendo aquí sólo las cosas básicas en relación con el formato de fecha para guardar y recuperar los datos para su presentación. Si tiene algún problema con este fragmento de código, entonces compartiré el código completo que utilicé para mi proyecto.

Al guardar sus datos, vincular a su valor de fecha en la instrucción SQL como la siguiente manera:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSString *dateString=[dateFormat stringFromDate:[NSDate date]]; 

    sqlite3_bind_text(saveStmt, 1, [dateString UTF8String] , -1, SQLITE_TRANSIENT); 

y cuando se recuperan datos que tiene que escribir el código:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSDate *myDate =[dateFormat dateFromString:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]]; 

ahora tiene una variable myDate de tipo NSDate que puede procesar a su manera:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"dd-MM-yyyy hh:mm:ss a"]; 
    NSLog(@"My Date was : %@", [formatter stringFromDate:myDate]); 

Debe tener que recordar tres cosas:

  1. En su fecha de SQLite tipo de campo debe ser DATETIME
  2. formato de fecha debe ser el mismo cuando se almacenan y cuando se recuperan
  3. Ahora se puede mostrar en su propio camino, pero siguiendo el formato. Debajo del formato se dan los detalles.

Formato:

'dd' = Day 01-31 
    'MM' = Month 01-12 
    'yyyy' = Year 2000 
    'HH' = Hour in 24 hour 
    'hh' = Hour in 12 hour 
    'mm' = Minute 00-59 
    'ss' = Second 00-59 
    'a' = AM/PM 
+0

Esto debe marcarse como la respuesta correcta. ¡Extenso hasta el punto, salvó mi día! – Tumtum

Cuestiones relacionadas