online convert iphone nsdateformatter

iphone - convert - string to date swift 4



iPhone NSDateFormatter Timezone Conversion (6)

Estoy intentando crear un formateador que convertirá el formato de fecha mostrado a un objeto NSDate:

NSString *dateStr = @"2010-06-21T19:00:00-05:00"; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd''T''HH:mm:ssZZZ"]; NSDate *date = [dateFormat dateFromString:dateStr];

El problema es la zona horaria -05: 00, que no se analiza correctamente con el formato anterior. ¿Alguna sugerencia?



Esta es la única solución que me funcionó:

[dateFormat setDateFormat:@"yyyy-MM-dd''T''HH:mm:ssZZZZZ"];


Este es el formato de tiempo predeterminado que obtuve de un backend de Sinatra ActiveRecord. Aquí está mi solución.

-(NSDate *) dateFromString:(NSString *)string{ NSMutableString * correctedDateString = [[NSMutableString alloc] initWithString:string]; [correctedDateString deleteCharactersInRange: NSMakeRange(22, 1)]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd''T''HH:mm:ssZZZ"]; return [formatter dateFromString:correctedDateString]; }


Honestamente, solo tendrá que cambiar los datos de origen (eliminando los dos puntos) antes de ejecutarlos en el formateador. Su cadena de fecha original no es estándar y ninguna de las cadenas de formato de zona horaria funcionará correctamente en ella.

Puede ver las entradas válidas en unicode.org .

ZZZ por ejemplo "-0500"

ZZZZ por ejemplo, "GMT-05: 00"

Nada para "-05: 00"


Para procesar la zona horaria con los dos puntos, solo necesita usar 5 ''Z''s. Este es un formato de fecha bastante común, el formato ISO-8601. Esto solo funcionará en iOS 6.x +

-(NSDate *) dateFromString:(NSString *)string { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd''T''HH:mm:ssZZZZZ"]; return [formatter dateFromString:string]; }


Puede ser que me haya perdido algo, pero ZZ funcionó para mí. Solía:

@"yyyy-MM-dd''T''HH:mm:ss.SSSZZ"

para

2014-02-27T08:00:00.000+04:00