2010-04-11 7 views
79

¿Hay una manera fácil de iniciar un NSDate con la fecha/hora actual de UTC?Ajuste de Objective-C NSDate a UTC actual

+1

¿Sería '[fecha NSDate]' trabajar? No estoy seguro si es UTC. – zneak

+0

Quiere un NSDate configurado en UTC. (No estoy seguro de por qué todo el mundo te da valores de "fecha local" o "NSString"). – Patricia

+2

No existe un 'NSDate' establecido en UTC, no tiene una zona horaria asociada. –

Respuesta

144

[NSDate date];

Es posible que desee crear una categoría que hace algo como esto:

-(NSString *)getUTCFormateDate:(NSDate *)localDate 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
    [dateFormatter setTimeZone:timeZone]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSString *dateString = [dateFormatter stringFromDate:localDate]; 
    [dateFormatter release]; 
    return dateString; 
} 
+2

NSTimeZone * timeZone = [NSTimeZone timeZoneWithName: @ "UTC"]; [dateFormatter setTimeZone: timeZone]; que lo clavó gracias – Brodie

+4

no se olvide de liberar el formateador de fecha ... –

+1

si esto se está moviendo a la producción, es posible que realmente desee crear un dateFormatter estático que se inicie perezosamente. La creación de una fechaFormatter es en realidad algo costosa. – jessecurry

13

NSDate es una referencia a un intervalo de una fecha de referencia absoluta, 1 de enero de 2001 00:00 GMT . Entonces, el método de clase [NSDate date] devolverá una representación de ese intervalo. Para presentar esos datos en un formato de texto en UTC, simplemente use NSDateFormatter con el NSTimeZone (UTC) apropiado para procesar según sea necesario.

+3

Creo que [NSDate ahora] debería ser [NSDate date] en esta respuesta. – foldinglettuce

+0

Estás correcto @foldinglettuce - reparado. – rcw3

2

NSDate objetos encapsulan un único punto en el tiempo, independientemente de cualquier sistema calendárico o zona horaria en particular. Los objetos de fecha son inmutables, lo que representa un intervalo de tiempo invariable relativo a una fecha de referencia absoluta (00:00:00 UTC el 1 de enero de 2001).

versión Swift:

extension NSDate { 
    func getUTCFormateDate() -> String { 
     let dateFormatter = NSDateFormatter() 
     let timeZone = NSTimeZone(name: "UTC") 
     dateFormatter.timeZone = timeZone 
     dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
     return dateFormatter.stringFromDate(self) 
    } 
}