Parce que c'est apparemment ma réponse, je vais essayer de le modifier pour contenir un peu plus d'informations.
En dépit de son nom, NSDate
dans et de lui-même tout simplement marque un point dans une machine de temps, pas une date. Il n'y a pas de corrélation entre le point dans le temps spécifié par un NSDate
et une année, le mois ou le jour. Pour cela, vous devez vous référer à un calendrier. Un moment donné dans le temps sera de retour différente de la date de l'information basée sur ce calendrier, vous êtes en train de regarder (les dates ne sont pas les mêmes dans les deux le calendrier Grégorien et le Juif calendriers, par exemple), et alors que le calendrier Grégorien est le plus largement utilisé des civils dans le monde - je suppose - nous sommes un peu biaisé qu' NSDate
devez toujours l'utiliser. NSDate
, heureusement, est bien plus bipartisan.
Obtenir la date et l'heure va passer par NSCalendar
, comme vous l'avez mentionné, mais il y a un moyen plus simple de le faire:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Qui génère une NSDateComponents
objet contenant le jour, le mois et l'année de l'actuel système de calendrier pour la journée en cours. (Note: ce n'est pas nécessairement le courant spécifié par l'utilisateur de calendrier, tout le système par défaut.)
Bien sûr, si vous utilisez un autre calendrier ou une date, vous pouvez facilement changer cela. Une liste de calendriers et agenda des unités peut être trouvé dans l' NSCalendar
Classe de Référence. Plus d'informations sur l' NSDateComponents
peut être trouvé dans l' NSDateComponents
Classe de Référence.
Pour référence, l'accès aux différents composants de l' NSDateComponents
est plutôt facile:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Vous avez juste à être conscient: NSDateComponents
ne contiennent pas des informations valables pour tous les champs que vous demandez, à moins que vous avez généré avec des informations valides (c'est à dire demande NSCalendar
fournir cette information avec d' NSCalendarUnit
s). NSDateComponents
ne contiennent aucune référence à des informations dans et d'eux - mêmes, ils sont de simples structures qui détiennent les numéros pour accéder à. Si vous souhaitez également obtenir une époque, par exemple, NSDateComponents
, vous aurez pour alimenter le générateur de méthode de NSCalendar
avec l' NSCalendarUnitEra
drapeau.