2010-02-24 7 views
3

Existe-t-il un moyen simple et efficace de convertir un horodatage Oracle en objet NSDate sur l'iPhone? J'ai demandé à mon client de me donner une base de données avec timestamps comme Unix Timestamp (double avec 0 = début 1970) mais cela semble être un problème pour eux. Merci.iPhone: Conversion d'un horodatage Oracle en NSDate ou en un horodatage Unix (par exemple en double)

Note: Vous pouvez facilement convertir un timestamp Unix à un NSDate avec

[NSDate dateWithTimeIntervalSince1970: timestamp] // timestamp is a "double" 

Ce que je dois faire est de convertir l'horodatage Oracle à une double, alias Unix Timestamp. Le reste est facile.

Plus d'infos: J'ai besoin du code Objective-C pour fonctionner sur l'iPhone en utilisant NSStrings qui représentent des dates au format Oracle Timestamp. Another StackOverflow thread suggère d'utiliser NSDateFormatter, mais je ne sais pas quel format utiliser et la méthode d'initialisation pour le formateur suggéré dans ce thread génère un avertissement pour moi.

Répondre

2

Je ne suis pas sûr de la conversion en un NSDate, mais vous pouvez facilement convertir une date Oracle en un timestamp unix. L'extrait de SQL suivant le faire:

(my_date - to_date('01/01/1970','DD/MM/YYYY')) * 86400 
+0

Désolé, mais je ne suis pas clair sur le contexte pour cela. to_date n'est pas une fonction iPhone SDK. (Et voir la publication originale pour NSDate partie.) – Amagrammer

+0

@Amagrammer: to_date() est une fonction dans Oracle dans SQL. Ar vous invite à exécuter cet extrait sur la base de données Oracle via SQL lors de l'extraction de la valeur de la date, ou demandez à votre client de l'exécuter et de vous fournir cette sortie au lieu de la date Oracle. –

+0

Mes excuses, si je n'étais pas clair sur ce point. –

2

Il ressemble à mon meilleur pari est d'utiliser les éléments suivants:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];  
[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"]; 

Je ne sais pas à quel point la variance il y a dans horodatages Oracle, donc si il y a un problème avec l'approche ci-dessus, j'aimerais savoir.

Merci pour les autres réponses. Je vais laisser la question ouverte pour inviter d'autres approches.

+0

Et puis vous compléteriez cette approche avec: NSDate date = [formatter dateFromString: dateString]; – arlomedia

2

Il est dommage que vous avez accepté cette réponse déjà, mais c'est la meilleure façon de le faire:

NSDate *dateTraded = [NSDate dateWithTimeIntervalSince1970 :[timestampVal integerValue]]; 

... où timestampVal est un objet NSString représentant une valeur d'horodatage.

+0

Comment sait-il si la chaîne timestampVal est MM/jj/aaaa ou jj/MM/aaaa? – Amagrammer

Questions connexes