2

のような日付文字列を認識する必要がありますTue Aug 13 17:29:20 MSK 2013。そして、私が知っているように、それを行うには NSDateFormmater で「V」記号を使用する必要がありますが、GMT+04:00タイムゾーンのようなものしか認識しません。タイムゾーンの略語を解析する他の方法はありますか?

コードは次のとおりです。

  NSDateFormatter *dft = [[NSDateFormatter alloc] init];
  [dft setDateFormat:@"EEE MMM dd HH:mm:ss V yyyy"];
  NSLog(@"%@", [dft stringFromDate:[NSDate date]]);
  NSLog(@"%@", [dft dateFromString:@"Tue Aug 13 17:29:20 MSK 2013"]);

出力:

Tue Aug 13 17:37:41 GMT+04:00 2013
(null)

出力付きでNSLog(@"%@", [dft dateFromString:@"Tue Aug 13 17:29:20 GMT+04.00 2013"])大丈夫です。

4

1 に答える 1

2

http://www.openradar.me/9944011によると、Apple は Lion/iOS 5 時代のある時期に、NSDateFormatter が依存する ICU ライブラリを更新しました。また、特に "MSK" (モスクワ時間) のようなほとんどの 3 文字のタイムゾーンは処理されなくなりました。それらは曖昧であるためです。ロケールに "cu" フラグが設定されている場合にのみ使用されます。

つまり、あなたはそれを処理することができます。たとえば、次のようにします。

 NSString *threeLetterZone = [[dateString componentsSeparatedByString:@" "] objectAtIndex:4];
 NSTimeZone *timeZone = [NSTimeZone timeZoneWithAbbreviation:threeLetterZone];
 if (timeZone) 
 {
            NSString *gmtTime = [dateString stringByReplacingOccurrencesOfString:threeLetterZone withString:@"GMT"];
            date = [[pivotalDateFormatter dateFromString:gmtTime] dateByAddingTimeInterval:-timeZone.secondsFromGMT];
 }

このコードに基づいて

于 2013-08-13T13:58:16.860 に答える