34

表示される日付形式を 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];  

問題はタイムゾーン -05:00 で、上記の形式では正しく解析されません。助言がありますか?

4

6 に答える 6

64

コロンを含むタイム ゾーンを処理するには、5 つの 'Z' を使用するだけです。これは、非常に一般的な日付形式である ISO-8601 形式です。これは 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];
}
于 2012-12-18T23:01:44.390 に答える
31

正直なところ、フォーマッタを実行する前に、ソース データを変更 (コロンを削除) する必要があります。元の日付文字列は非標準であり、タイム ゾーン形式の文字列はどれも正しく機能しません。

有効な入力は unicode.org で確認できます。

ZZZ 例: "-0500"

ZZZZ 例: "GMT-05:00"

「-05:00」には何もありません

于 2010-06-22T19:32:58.337 に答える
3

私は何かを逃したかもしれませんがZZ、私のために働きました。私が使用した:

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

為に

2014-02-27T08:00:00.000+04:00
于 2014-03-07T11:16:47.613 に答える
1

これは私のために働いた唯一の解決策です:

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
于 2015-05-19T23:18:57.587 に答える
1

これは、Sinatra ActiveRecord バックエンドから取得したデフォルトの時間形式です。これが私の解決策です。

-(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];
}
于 2012-11-29T14:44:36.673 に答える
0

5 ZZZZZ - GMT から BST へのサンプルを使って書いたカテゴリです

https://github.com/clearbrian/NSDateFormatter_ISO_8601

于 2014-03-04T13:18:53.647 に答える