はあるので簡単に変換するiso8601形式のタイムスタンプにフォーマットしたNSDate?

StackOverflow https://stackoverflow.com/questions/2201216

質問

を利用した場合、次のコード:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
NSDate *myDate = [dateFormatter dateFromString:@"2010-01-28T15:22:23.863"];
NSLog(@"%@", [dateFormatter stringFromDate:myDate]);

でに変換され Date オブジェクトができないようにしたりしないでくださいその他の方法によ yyyy-MM-dd'T'HH:mm, (何がログインする 2010-01-28T15:22:23

を変更した場合、購入したのdateFormat言 [dateFormatter setDateFormat:@"yyyy-MMMM-d'T'HH:mm"]; 日付オブジェクトがnullの場合...

私の究極の問題は、これらのフォーマット、iso8601形式のタイムスタンプからのSQLデータベースをご利用いただくためには、インスタンス, NSDateFormatterMediumStyle 戻"1 2010"?

役に立ちましたか?

解決

出力を処理するには別のフォーマッタが必要です。これをコードの後に​​置きます。

NSDateFormatter *anotherDateFormatter = [[NSDateFormatter alloc] init];   
[anotherDateFormatter setDateStyle:NSDateFormatterLongStyle];
[anotherDateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"%@", [anotherDateFormatter stringFromDate:myDate]);

他のヒント

似たような、しかしもう少し複雑な問題がありましたが、非常に簡単な解決策を見つけました。

問題:受信した ISO8601 の日付は次のようになります。 2006-06-14T11:06:00+02:00 最後にタイムゾーン オフセットがあります。

ソリューション:ピーター・ホージーのも​​のを使用する ISO8601DateFormatter そこからダウンロードできます ここ.

ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSDate *theDate = [formatter dateFromString:dateString];
[formatter release], formatter = nil;

そして

ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSString *dateString = [formatter stringFromDate:[twitch dateTwitched]];
[formatter release], formatter = nil;

ここにあるリンゴからのサンプルコード

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    NSDate *date = [formatter dateFromString:dateString];

リンク: https://developer.apple.com/library /ios/#qa/qa1480/_index.htmlする

だけのiOS 6.0以降にこのフォーマットを使用することができることを言及します:

 yyyy-MM-dd'T'HH:mm:ssZZZZZ

非常に高速C実装の構文解析のiso8601形式NSStringsにNSDatesに SAMCategories.インストールすることができまCocoaPodsでコピー、ファイルをプロジェクトに関する

こちらは使い方を指導することもでき:

[NSDate sam_dateFromISO8601String:@"2013-08-24T06:51:21-07:00"]

とても力強く支援を欠損タイムゾーンなど。のように 私のコメント上 言NSDateFormatterは遅々としたものだった私にとっての構文解析時にも。切り替えることを実施した膨大な額となります。

このコードを用いて6つの生産アプリケーションを含むHipstamaticと するものなのかどうかに関して取り組んとられています。があり 試験スイート 防止への回帰曲線。

短いと思いこの構文解析のiso8601形式の文字列をObjective-C


短ければ、関性能および転送の整数ではなくiso8601形式の文字列を大幅に好ましい。できるだけで変換して日 [NSDate dateWithTimeIntervalSince1970:yourInteger].機械製品の操作-修理-高速していなかったということではないかと少ない文字を転送の線としています。

私はリンゴNSDate方法を確認し、最後の時間は、ISO8601をサポートしていないことに注意してください。私はまだで公式サポートを置くことについてAppleとバグがあります。

+ (id)dateWithNaturalLanguageString:(NSString *)string

適切にドキュメントは、あなたがそれを使用してはならないと言うものの、解析し、ISO801文字列からNSDateオブジェクトを作成します(私はそれを実行した最後の時間は)、それは私がこれまで試したすべてのISO8601の日付に取り組んだでしょう。

@danielbeard答えは私のために働きました。しかし、あなたがそうでなければ、それはあなたが望むものではありません、あなたの現在のタイムゾーンにUTCの日付を変換タイムゾーンを含める必要があります。

- (NSDate *) dateFromISO8601DateString:(NSString *) dateString {
    NSDateFormatter * dateFormatter = [NSDateFormatter new];
    dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    NSDate * date = [dateFormatter dateFromString:dateString];
    return date;
}

@Threadキャプテン このフォーマットをお試しください: "YYYY-MM-dd'T'HH:MM:SS.SSS"

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top