2012-11-21 8 views
7

Quando sto stampa della datahanno bisogno di informazioni sulla stampa [data NSDate]

//getting the current date and time 
self.date = [NSDate date]; 
NSLog(@"%@",date); 

La data che sto ottenendo è corretto, ma c'è un ritardo nel tempo di 6 ore. Il mio orario di sistema è corretto.

+0

Il metodo [Data NDate] restituisce la data e l'ora correnti in base alle impostazioni locali del dispositivo. Se si desidera impostare impostazioni internazionali diverse, è necessario impostarlo manualmente con "descriptionWithLocale" che restituisce una rappresentazione in formato stringa del destinatario utilizzando le impostazioni locali specificate. – ldindu

risposta

10

Fare uso di NSDateFormatter

NSDate *today = [NSDate date]; 

//Create the dateformatter object 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

//Set the required date format 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

//Get the string date 
NSString *dateString = [dateFormatter stringFromDate:today]; 

//Display on the console 
NSLog(dateString); 
+2

Nota che il dateFormatString è sbagliato. Stamperà anche il mese come parte del tempo. E anche SS sta per qualcos'altro. Probabilmente dovrebbe essere "@" aaaa-MM-gg HH: mm: ss " – luk2302

+0

@ luk2302: grazie mille. Ho aggiornato la mia risposta. –

16

provare questo

NSLocale* currentLoc = [NSLocale currentLocale]; 
NSLog(@"%@",[[NSDate date] descriptionWithLocale:currentLoc]); 
+7

[[NSDate data] descriptionWithLocale: [NSLocale currentLocale]] rendono l'one-liner più facile da copiare – gjpc

+2

al giorno d'oggi si dovrebbe usare [NSLocale autoupdatingCurrentLocale] – malhal

0

La rappresentazione data stringa di default è probabilmente la formattazione della data come UTC, piuttosto che il fuso orario locale (il formato esatto che userà è non definito, e può cambiare da versione a versione, quindi non dovresti fare affidamento su di esso). È necessario utilizzare la classe NSDateFormatter se è necessario formattare una data in un formato particolare (o con un fuso orario particolare, incluso il fuso orario locale); vedere Data Formatting Guide e NSDateFormatter Class Reference per ulteriori informazioni.

2

La registrazione di un NSDate nel debugger è in qualche modo fuorviante in quanto fornisce un giorno e un'ora di calendario per un determinato fuso orario: UTC/GMT. Tuttavia, NSDate non ha alcun fuso orario intrinseco o alcuna relazione intrinseca a come gli esseri umani percepiscono e pensano alle date. Invece, è un timestamp. Classi come NSDateComponents, NSTimeZone, NSDateFormatter e così via tutti esistono per fornire contesto e formattazione umana.

Quindi quello che viene visualizzato è il formato di data e ora formattato per quel particolare formato e fuso orario UTC, che è come appare NSDate quando viene stampato nel debugger o nella console. Se dovessi calcolare lo sfasamento del fuso orario tra UTC e il tuo fuso orario, troverai che la data rappresenta il timestamp che hai fornito, e non una, comunque, molte ore di pausa.