2012-04-23 17 views
10

si trato:¿Por qué NSDate from string tiene un día menos?

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyyMMdd"]; 

y

[formatter dateFromString:@"20120423"]; 

Mi nuevo objeto NSDate será: 2012 04 22 . ¿Por qué un día menos?

Gracias

+2

qué es la zona configurada en su simulador o dispositivo. Se establecerá en esa zona por defecto. – rishi

+0

se trata de la zona horaria ... la diferencia puede ser solo de unas pocas horas() o incluso de una sola, como '2017-06-02 00:00:00 GMT + 1' es igual a' 2017-06-01 23:00:00 GMT + 0' que parece que es un día corto, si le importan los valores de años-meses-días. – holex

Respuesta

19

Usted tiene problemas con la zona horaria y se puede resolver mediante la adición de esta línea de código:

formatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; 
+1

Muy útil amigo! Estaba solucionando un problema del último día y este simple revestimiento funcionó :) – Pushkraj

2

Para los que busca rápida versión 3

let formatter  = DateFormatter() 
formatter.timezone = TimeZone(abbreviation: "GMT") 
formatter.dateFormat = "yyyyMMdd" 
formatter.date(from: "20120423") 
0

Para líneas de uno usando Swift 3

Date.init(dateString: "2014-07-31", format: "yyyy-MM-dd", timeZone: TimeZone.init(abbreviation: "GMT")!) 
Cuestiones relacionadas