El análisis de una fecha rfc3339 con NSDateFormatter parece ser imposible, en el caso general. ¿Me equivoco? [Editar 2 años después: ¡ahora hay un camino! . Ver más abajo y la nota]Analizando rfc3339 fechas con NSDateFormatter en iOS 4.xy MacOS X 10.6: ¿imposible?
Un servicio web no-especialmente maleable me está alimentando fechas como:
2009-12-31T00:00:00-06:00
Rfc3339 compatible, salida por defecto de la biblioteca jaxb que están usando. Observe los dos puntos, lo que requiere rfc3339 cuando el desplazamiento no es una "z" literal:
time-numoffset = ("+"/"-") time-hour ":" time-minute time-offset = "Z"/time-numoffset
Quiero analizar estos en NSDates.
NSDateFormatter desea patrones en la sintaxis especificada por Unicode, que ofrece símbolos de campo de fecha para zonas horarias como "PDT", "-0800", "GMT-08: 00" pero no "-08: 00".
Googling, y otros de los preguntas similares, produce sólo formatos de fecha como
[myDateParser setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"];
/* or: */ [myDateParser setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
El último de los cuales requiere un literal "Z", y la antigua insiste ya sea la ausencia de un colon o presencia de una " GMT". Sin embargo, aparecieron a trabajar antes de iOS 4.x (posiblemente descartando la tz compensar completamente; mis datos no son claras.)
Mis opciones en este momento hay una gran cantidad siento:
- descubrir algunos especificador de formato no documentado, o algún modo extraño para poner NSDateFormatter en, que aceptará los dos puntos: tiro largo, probablemente inexistente. [nota al pie]
- persuade a mi editor de servicios para convertir todas las fechas en hora zulu y especifique 'Z': políticamente desafiante.
- escriba mi propia subclase NSFormatter o investigue bien anterior
strptime_l
: trabajo. :) - string-manipular mi entrada y eliminar el último colon: frágil y feo, pero el camino probable de menor resistencia.
¿He entendido correctamente la situación, que la corriente NSDateFormatter sigue estrictamente Unicode sin extensiones; y los formatos Unicode son insuficientes para describir completamente una fecha rfc3339?
[Nota] vuelvo a esto tres años más tarde para virar en una pequeña adición: Unicode y Apple han añadido esta característica para las cadenas de formato, a partir de iOS 6/OSX10.8. Compare The latest revision as of this writing con its immediate predecessor, y tenga en cuenta la adición de 5 "Z" s, que produce un formato de zona como "-08: 00". Entonces, si puede salirse con la ayuda de abandonar 5.x/10.7, hay una nueva forma correcta de hacerlo. Dejaré la respuesta anterior en pie, ya que sigue siendo el mejor enfoque cuando se requiere compatibilidad con versiones anteriores.
Gracias por el puntero - Miré en su fuente, y lo que usted sabe, la opción 4 (eliminar los dos últimos puntos) es precisamente lo que hace. Como esto funciona para él, probablemente sigo su ejemplo. – rgeorge