2012-11-21 3 views
7

Quand je suis en train d'imprimer la dateBesoin d'informations sur l'impression [date NSDate]

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

La date que je reçois est correct, mais il y a un retard dans le temps de 6 heures. Mon heure système est correcte.

+0

La méthode [NDate date] vous renvoie la date et l'heure actuelles en fonction des paramètres régionaux du périphérique. Si vous souhaitez définir des paramètres régionaux différents, vous devez le définir manuellement avec "descriptionWithLocale" qui renvoie une représentation sous forme de chaîne du récepteur en utilisant les paramètres régionaux donnés. – ldindu

Répondre

10

Faire usage de 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

Notez que le dateFormatString est erroné. Il imprimera également le mois dans le temps. Et SS représente quelque chose d'autre aussi. Il devrait probablement être '@" aaaa-MM-jj HH: mm: ss "' – luk2302

+0

@ luk2302: merci beaucoup. J'ai mis à jour ma réponse. –

16

essayer cette

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

[[date NSDate] descriptionWithLocale: [NSLocale currentLocale]] rendre plus facile une doublure pour copier – gjpc

+2

de nos jours, vous devez utiliser [NSLocale autoupdatingCurrentLocale] – malhal

0

La représentation de chaîne de date par défaut est probablement formate la date UTC, plutôt que votre fuseau horaire local (le format exact qu'il utilisera est non défini, et peut changer d'une version à l'autre, vous ne devriez donc pas vous y fier). Vous devez utiliser la classe NSDateFormatter si vous devez formater une date dans un format particulier (ou avec un fuseau horaire particulier, y compris le fuseau horaire local); Voir le Data Formatting Guide et le NSDateFormatter Class Reference pour plus d'informations.

2

La consignation d'un NSDate dans le débogueur est quelque peu trompeuse car elle vous donne un jour et une heure de calendrier pour un fuseau horaire particulier - UTC/GMT. Cependant, NSDate n'a pas de fuseau horaire inhérent ou de relation inhérente à la façon dont les humains perçoivent et pensent aux dates du tout. Au lieu de cela, c'est un horodatage. Des classes comme NSDateComponents, NSTimeZone, NSDateFormatter, et ainsi de suite existent pour fournir un contexte et un formatage humains. Donc, ce que vous voyez est l'horodatage formaté pour ce format particulier et le fuseau horaire UTC, qui est comment NSDate apparaîtra toujours lorsqu'il est imprimé dans le débogueur ou la console. Si vous deviez calculer le décalage de fuseau horaire entre l'heure UTC et votre propre fuseau horaire, vous constateriez que la date représente l'horodatage que vous lui avez donné, et non pas un mais plusieurs heures d'arrêt.