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?
5 ZZZZZ - aquí hay una categoría que escribí con una muestra de GMT para BST
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