Objective-C Language
NSDate
Buscar..
Observaciones
NSDate
es un tipo de valor muy simple, que representa un momento exacto en el tiempo universal. No contiene información sobre zonas horarias, horario de verano, calendarios o configuración regional.
NSDate
es realmente solo una envoltura inmutable alrededor de un NSTimeInterval
que es un double
. No hay una subclase mutable, como ocurre con otros tipos de valores en Foundation.
Creando un NSDate
La clase NSDate
proporciona métodos para crear objetos NSDate
correspondientes a una fecha y hora determinadas. Se puede inicializar un NSDate
utilizando el inicializador designado, que:
Devuelve un objeto
NSDate
inicializado relativo a las 00:00:00 UTC del 1 de enero de 2001 en un número determinado de segundos.
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];
NSDate
también proporciona una manera fácil de crear un NSDate
igual a la fecha y hora actuales:
NSDate *now = [NSDate date];
También es posible crear un NSDate
una cantidad determinada de segundos a partir de la fecha y hora actuales:
NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];
Comparación de fechas
Hay 4 métodos para comparar NSDate
s en Objective-C:
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate
-
- (NSDate *)earlierDate:(NSDate *)anotherDate
-
- (NSDate *)laterDate:(NSDate *)anotherDate
-
- (NSComparisonResult)compare:(NSDate *)anotherDate
Considere el siguiente ejemplo utilizando 2 fechas, fecha de NSDate date1 = July 7, 2016
y NSDate date2 = July 2, 2016
:
NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;
NSDateComponents *comps2 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 2;
NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016
Ahora que se han creado los NSDate
, se pueden comparar:
if ([date1 isEqualToDate:date2]) {
//Here it returns false, as both dates are not equal
}
También podemos usar los earlierDate:
y laterDate:
de la clase NSDate
:
NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.
Por último, podemos usar el NSDate
de compare:
NSDate
:
NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
//Fails
//Comes here if date1 is earlier than date2. In our case it will not come here.
}else if (result == NSOrderedSame){
//Fails
//Comes here if date1 is the same as date2. In our case it will not come here.
}else{//NSOrderedDescending
//Succeeds
//Comes here if date1 is later than date2. In our case it will come here
}
Convierta NSDate que se compone de hora y minuto (solo) a un NSDate completo
Hay muchos casos en los que uno ha creado una fecha de emisión (NSDate) a partir de solo un formato de hora y minuto, es decir: 08:12
El inconveniente de esta situación es que su NSDate está casi completamente "desnudo" y lo que debe hacer es crear: día, mes, año, segundo y huso horario para que este objeto "siga el ritmo" con otros tipos de NSDate.
En aras del ejemplo, digamos que hourAndMinute es el tipo NSDate que se compone de formato de hora y minuto:
NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];
NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];
Ahora tu objeto es el opuesto total de estar "desnudo".
Convertir NSDate a NSString
Si ww tiene el objeto NSDate, y queremos convertirlo en NSString. Hay diferentes tipos de cadenas de fecha. ¿Cómo podemos hacer eso ?, es muy simple. Sólo 3 pasos.
- Crear objeto NSDateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- Establece el formato de fecha en el que quieres tu cadena.
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
Ahora, consigue la cadena formateada
NSDate *date = [NSDate date]; // your NSDate object NSString *dateString = [dateFormatter stringFromDate:date];
Esto dará salida a algo como esto: 2001-01-02 at 13:00
Nota:
Crear una instancia de NSDateFormatter
es una operación costosa, por lo que se recomienda crearla una vez y reutilizarla cuando sea posible.