表示されている日付形式を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で、上記の形式では正しく解析されません。助言がありますか?
正直なところ、フォーマッタを実行する前に、ソースデータを変更する(コロンを削除する)必要があります。元の日付文字列は非標準であり、タイムゾーン形式文字列はどれも正しく機能しません。
有効な入力 nicode.org を確認できます。
ZZZ例「-0500」
ZZZZ例「GMT-05:00」
「-05:00」には何もない
コロンを含むタイムゾーンを処理するには、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];
}
私は何かを逃したかもしれませんが、ZZ
は私のために働きました。私が使用した:
@"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
for
2014-02-27T08:00:00.000+04:00
これは、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];
}
これは私のために働いた唯一の解決策です:
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
5 ZZZZZ-GMTからBSTへのサンプルで書いたカテゴリがここにあります