objective-c - tipos - venenos que no se detectan en una autopsia
Obtener la fecha de[fecha NSDate] por unas pocas horas (3)
NSDate
objetos NSDate
no tienen zonas horarias; representan un momento absoluto en el tiempo. Sin embargo, cuando usted pide uno para su description
(imprimiéndola en un NSLog
, por ejemplo), tiene que elegir una zona horaria. La opción "predeterminada" más razonable es GMT. Si usted no está en GMT usted mismo, la fecha parecerá ser incorrecta, por la cantidad de su propia compensación.
Siempre debe utilizar un NSDateFormatter
, estableciendo su timezone
a la suya, antes de mostrar una fecha.
estoy usando
NSDate *date = [NSDate date];
para obtener la fecha, pero la fecha que me sale es de 2 horas.
Usted puede obtener su fecha corregida de esta manera:
NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
-(NSDate *)getDateInCurrentSystemTimeZone
{
NSDate* sourceDate = [NSDate date];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
return destinationDate;
}