39

ISO 8601タイムスタンプをNSDate. を使用しようとしましたが、タイムスタンプの末尾に表示されるUTC時間オフセットでNSDateFormatter動作させることができません。説明するために、次のようなタイムスタンプを:に変換したいと思います。私の質問は、「-06:00」の部分をどのように処理すればよいですか? 日付形式文字列として使用しようとしましたが、機能しません。助言がありますか?NSDate2011-03-03T06:00:00-06:00yyyy-MM-dd'T'HH:mm:ssZ

4

6 に答える 6

18

私の場合、次のようなものを受け取りました。

"2015-05-07T16:16:47.054403Z"

そして、私は使用しなければなりませんでした:

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

于 2015-05-12T11:37:45.873 に答える
5

問題は:、タイムゾーンオフセット内の文字です。そのコロンだけを明示的に削除することも、すべてのコロンを削除してから続行することもできます。例えば:

NSString *s = @"2011-03-03T06:00:00-06:00";
s = [s stringByReplacingOccurrencesOfString:@":" withString:@""];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd'T'HHmmssZZ"];
NSDate *d = [f dateFromString:s];
NSLog(@"%@", d);

このログ:

EmptyFoundation[5088:707] 2011-03-03 12:00:00 +0000
于 2011-09-17T16:11:52.933 に答える
4

これが私が使用する方法です:

-(NSDate *)dateFromISO8601String:(NSString *)dateString{
    if (!dateString) return nil;
    if ([dateString hasSuffix:@"Z"]) {
      dateString = [[dateString substringToIndex:(dateString.length-1)] stringByAppendingString:@"-0000"];
    }
    dateString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@""];
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HHmmssZ";
    return [dateFormatter dateFromString:dateString];
}
于 2012-09-22T15:18:49.740 に答える