2011-09-21 4 views
5

Ho davvero difficoltà a convertire questo timestamp in una bella stringa di data formattata.Objective-C: aiutami a convertire un timestamp in una data/ora formattata

Ecco il timestamp: "1.316.625,985 mila"

Ed ecco la funzione che ho fatto:

-(NSString*)timestamp2date:(NSString*)timestamp{ 
    NSString * timeStampString =timestamp; 
    //[timeStampString stringByAppendingString:@"000"]; //convert to ms 
    NSTimeInterval _interval=[timeStampString doubleValue]; 
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval]; 
    NSDateFormatter *_formatter=[[NSDateFormatter alloc]init]; 
    [_formatter setDateFormat:@"dd/MM/yy"]; 
    return [_formatter stringFromDate:date]; 
} 

Il problema è, mantiene le date che tornano nel 1972! (31/7/72) Questo è sbagliato, dato che è una data di settembre 2011 ...

Qualcuno può suggerire una soluzione?

Molte grazie in anticipo,

+0

Hai provato a lavorare con NSCalendar e NSDateComponents per formare il tuo oggetto data? È così che ho finito per farlo in passato. –

+0

Hai finito per risolvere questo? – bryanmac

risposta

2

Hai verificato che la stringa (timestampString) e il doppio valore (_interval) siano uguali e che lo doubleValue tenga in considerazione tutti i caratteri della stringa?

Forse l'interpretazione della stringa in doppia coltura il valore?


Sei anche sicuro che il timestamp si sta interpretting è davvero un timestamp UNIX, il che significa che conta il numero di secondi trascorsi dal 01/01/1970 (e non giorni dal 01/01/1970? ... o non secondi ma dal momento che un'altra data?)

(forse dare un esempio del valore del timestamp che si sta tentando di interpretare)

+0

Ha fatto un esempio del timestamp sopra. L'ho provato e la stringa e il doppio sono gli stessi, quindi non è così. – bryanmac

14

Is not epoca secondi dal 1/1/1970? sei sicuro di non aver lasciato la linea millisecondo?

Quando eseguivo la logica (senza la tua riga append 000 per ms), ha funzionato. Ecco quello che ho fatto:

NSString * timeStampString = @"1316641549"; 
    NSTimeInterval _interval=[timeStampString doubleValue]; 
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval]; 
    NSLog(@"%@", date); 

E 'emesso:

2011-09-21 17: 46: 14,384 Craplet [13218: 707] 2011-09-21 21:45:49 +0000

+0

Ok, grazie. Mi sto addormentando qui. Dovrò guardarlo la mattina. Avrò sogni felici ora! – Eamorr

+0

Fresco - disconnetti la data come sto facendo sopra solo per essere sicuro che non stai colpendo qualche problema di formattazione ... – bryanmac

2

è possibile passare [timeStampString doubleValue] direttamente in dateWithTimeIntervalSince1970: invece di convertirlo in un NSTimeInterval.

Inoltre, prova ad aggiungere alcune istruzioni NSLog per vedere quali sono i tuoi valori in vari punti, che dovrebbero aiutare a rintracciare dove si trova la differenza.

Spero che questo aiuti!

1

Mentre si utilizza NSInterval per ottenere l'intervallo, assicurarsi che il timestamp sia in secondi e non in millisecondi. Se è in millisecondi, basta dividere il valore NSInterval per 1000 e quindi provare la formattazione.

4

Basta dividere il [timeStampString doubleValue] per mille come:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStampString doubleValue]/1000.0]; 
NSDateFormatter *_formatter=[[NSDateFormatter alloc]init]; 
[_formatter setDateFormat:@"dd/MM/yy"]; 
return [_formatter stringFromDate:date]; 

o provare [timeStampString longLongValue] /1000.0 invece

Good Luck!