Como aparentemente esta es mi respuesta más popular, intentaré editarla para que contenga un poco más de información.
A pesar de su nombre, NSDate
en sí mismo simplemente marca un punto en el tiempo de la máquina, no una fecha. No existe una correlación entre el punto en el tiempo especificado por un NSDate
año, mes o día. Para eso, debes consultar un calendario. Cualquier momento dado devolverá información de fecha diferente según el calendario que esté mirando (las fechas no son las mismas en los calendarios gregoriano y judío, por ejemplo), y aunque el calendario gregoriano es el calendario más utilizado en el mundo, supongo, estamos un poco sesgados que NSDate
siempre deberían usarlo. NSDate
Afortunadamente, es mucho más bipartidista.
Obtendrá la fecha y la hora NSCalendar
, como mencionó, pero hay una manera más simple de hacerlo:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Eso genera un NSDateComponents
objeto que contiene el día, mes y año del calendario actual del sistema para el día actual. ( Nota: este no es necesariamente el calendario actual especificado por el usuario , solo el sistema predeterminado).
Por supuesto, si está usando un calendario o fecha diferente, puede cambiarlo fácilmente. Se puede encontrar una lista de calendarios y unidades de calendario disponibles en la NSCalendar
Referencia de clase . Se NSDateComponents
puede encontrar más información sobre la NSDateComponents
Referencia de clase .
Como referencia, acceder a componentes individuales desde NSDateComponents
es bastante fácil:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Solo debe tener en cuenta: NSDateComponents
no contendrá información válida para los campos que solicite a menos que los haya generado con esa información válida (es decir, solicite NSCalendar
proporcionar esa información con NSCalendarUnit
s). NSDateComponents
no contienen información de referencia en sí mismas: son solo estructuras simples que contienen números para que usted acceda. Si desea obtener una era, por ejemplo, fuera de NSDateComponents
, tendrá que alimentar el método generador NSCalendar
con la NSCalendarUnitEra
bandera.