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.

  1. Crear objeto NSDateFormatter
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. Establece el formato de fecha en el que quieres tu cadena.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow