Parce que c'est apparemment ma réponse la plus populaire, je vais essayer de la modifier pour contenir un peu plus d'informations.
Malgré son nom, NSDate
en soi, il marque simplement un point dans le temps de la machine, pas une date. Il n'y a pas de corrélation entre le moment spécifié par un NSDate
et un an, un mois ou un jour. Pour cela, vous devez vous référer à un calendrier. Tout moment donné renverra des informations de date différentes en fonction du calendrier que vous regardez (les dates ne sont pas les mêmes dans les calendriers grégorien et juif, par exemple), et bien que le calendrier grégorien soit le calendrier le plus utilisé dans le monde - je suppose - nous sommes un peu biaisés qui NSDate
devraient toujours l'utiliser. NSDate
, heureusement, est beaucoup plus bipartite.
Obtenir la date et l'heure devra passer NSCalendar
, comme vous l'avez mentionné, mais il existe un moyen plus simple de le faire:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Cela génère un NSDateComponents
objet contenant le jour, le mois et l'année à partir du calendrier système actuel pour le jour en cours. ( Remarque: ce n'est pas nécessairement le calendrier actuel spécifié par l'utilisateur , juste celui par défaut du système.)
Bien sûr, si vous utilisez un calendrier ou une date différents, vous pouvez facilement changer cela. Une liste des calendriers et des unités de calendrier disponibles se trouve dans la NSCalendar
référence de classe . Plus d'informations sur NSDateComponents
peuvent être trouvées dans la NSDateComponents
référence de classe .
Pour référence, l'accès à des composants individuels depuis le NSDateComponents
est assez simple:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Vous devez juste être conscient: NSDateComponents
ne contiendra pas d'informations valides pour les champs que vous demandez, sauf si vous les avez générés avec ces informations valides (c'est- NSCalendar
à- dire demander à fournir ces informations avec NSCalendarUnit
s). NSDateComponents
ne contiennent aucune information de référence en soi - ce ne sont que de simples structures qui contiennent des numéros auxquels vous pouvez accéder. Si vous voulez également sortir une ère, par exemple NSDateComponents
, vous devrez alimenter la méthode du générateur NSCalendar
avec le NSCalendarUnitEra
drapeau.