iPhone NSDateFormatter Conversia fusului orar (Programare, Iphone, Nsdateformatter)

John Muchow a intrebat.
a intrebat.

Încerc să creez un formator care să convertească formatul de dată afișat într-un obiect 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];  

Problema este fusul orar -05:00, care nu este analizat corect cu formatul de mai sus. Aveți vreo sugestie?

Comentarii

  • modelul dvs. se potrivește cu adevărat cu intrarea? –  > Por willcodejavaforfood.
  • Formatul este în regulă până la fusul orar (-05:00). Dacă înlătur ‘:’, formatul funcționează. Încerc să înțeleg dacă există o modalitate de a avea un formator care să analizeze corect fusul orar așa cum este. –  > Por John Muchow.
  • Vedeți răspunsul meu aici: stackoverflow.com/questions/3094819/… –  > Por Werner Altewischer.
  • pueden ayudarme con estan pregunta stackoverflow.com/questions/15162835/… gracias – –  > Por tony.
  • Utilizator NSISO8601DateFormatter în schimb, așa cum a sugerat Apple doc –  > Por DawnSong.
6 răspunsuri
chrissr

Sincer, va trebui doar să modificați datele sursă (eliminând două puncte) înainte de a le rula prin formator. Șirul dvs. de date original este non-standard și niciunul dintre șirurile de formatare a fusului orar nu va funcționa corect pe el.

Puteți vedea intrările valide pe unicode.org.

ZZZ, de exemplu „-0500”

ZZZZ, de exemplu „GMT-05:00”

Nimic pentru „-05:00”

Comentarii

  • După ce am încercat mai multe abordări, la asta am ajuns și eu. Mulțumesc.  > Por John Muchow.
  • Știu că aceasta este o întrebare veche, dar am vrut să comentez că m-am confruntat cu exact aceeași problemă de formatare. Formatul respectiv este formatul ISO 8601, care este un format destul de standard. –  > Por Chris C.
  • vă mulțumesc pentru răspunsul la întrebarea despre : în plus în fusul orar. Obțineam un fus orar de la un feed rss de la Google care avea -04:00 și mă înnebunea de ore întregi. Soluția ta de a schimba tz la -0400 a fost soluția. –  > Por jangelo42.
  • Aceasta nu mai este cea mai optimă soluție. Vedeți răspunsul meu de mai jos. –  > Por brynbodayle.
  • Notă: Folosiți „z” minuscul pentru a obține doar șirul fusului orar (de ex. zzz -> EDT) –  > Por Albert Renshaw.
brynbodayle

Pentru a procesa fusul orar cu două puncte în el, trebuie doar să utilizați 5 „Z”. Acesta este un format de dată destul de comun, formatul ISO-8601. Acest lucru va funcționa numai pe 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];
}

Comentarii

  • Confirmat că aceasta este o soluție mai bună decât răspunsul acceptat! –  > Por Byte.
  • Funcționează pe iOS6.0+, dar nu și pe 5.0 sau 5.1 –  > Por Richard Groves.
  • da, 5 Z funcționează – iată o categorie github.com/clearbrian/NSDateFormatter_ISO_8601 –  > Por brian.clear.
  • Nu a funcționat pentru mine (2016-04-04T00:00:00:00-5:00), însă aceasta a funcționat- yyyy-MM-dd’T’HH:mm:ssZ:z – user5936834
DanSkeel

Poate că mi-a scăpat ceva, dar ZZ a funcționat pentru mine.Am folosit:

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

pentru

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

Logan

Acesta este formatul de timp implicit pe care l-am obținut de la un backend ActiveRecord Sinatra. Iată soluția mea.

-(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];
}

Dave Cole

Aceasta este singura soluție care a funcționat pentru mine:

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

brian.clear

5 ZZZZZZZ – iată o categorie pe care am scris-o cu câteva exemple de transformare din GMT în BST

https://github.com/clearbrian/NSDateFormatter_ISO_8601