iPhone NSDateFormatter Conversión de Zona horaria
Estoy intentando crear un formateador que convierta el formato de fecha mostrado en 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?
6 answers
Honestamente, solo tendrá que cambiar los datos de origen (eliminando los dos puntos) antes de ejecutarlos a través del 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 e. g."-0500"
ZZZZ por ejemplo "GMT-05: 00"
Nada para "-05: 00"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-22 19:32:58
Para procesar la zona horaria con dos puntos en ella, solo necesita usar 5 'Z. 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];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-23 14:48:18
Puede que me haya perdido algo, pero ZZ
funcionó para mí.
He utilizado:
@"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
Para
2014-02-27T08:00:00.000+04:00
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-07 11:16:47
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];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-29 14:44:36
Esta es la única solución que funcionó para mí:
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-19 23:18:57
5 ZZZZZ-heres una categoría que escribí con alguna muestra de GMT a BST
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-04 13:18:53