これを使用して、現在の日付を含む文字列を取得しました:
NSString *date = [[NSDate date] description];
別の時点で、この文字列から日付を取得したいので、次のコードを使用しました。
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehaviorDefault];
[dateFormatter setDateFormat:@"YYYY-MM-DD HH:MM:SS ±HHMM"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:<NSString containing date>];
dateFromString
をnil
0x0として取得しています。私は何を間違えていますか?
書式文字列構文を発明して、それが機能することを期待することはできません。実際に文書化された形式を使用する必要があります。 (真剣に、「MM」は「月」、「分」、「GMTオフセット分」をすべて同時に意味しますか?)
ドキュメント が指摘しているように、10.4フォーマッタは nicodeフォーマット文字列 を使用します。
代わりに「yyyy-MM-dd HH:mm:ss ZZZ」を試してください。
また、Objective-CソースはASCIIです。そこに±のような文字を入れないでください。どんな文脈でも機能することを期待してください。代わりに、stringsファイルを使用してください。
また、dateFromString:は自動解放されたNSDateを返します。
NSDate *dateFromString = [[NSDate alloc] init]; // <- non freed instance
dateFromString = [dateFormatter dateFromString:<NSString containing date>]; // <- new autoreleased instance
....
[dateFromString release]; // <- wrong
あなたがしたいことがあります:
//NSDate *dateFromString = [[NSDate alloc] init];
NSDate *dateFromString = [dateFormatter dateFromString:<NSString containing date>];
....
//[dateFromString release]; // dateFromString is autoreleased
これが誰かを救うことを願っています:)
そのためにNSString拡張機能を作成しました。
// Simple as this.
date = dateString.dateValue;
NSDataDetector のおかげで、多くのフォーマットを認識します。
// Tested in GMT+1 (Hungary).
@"2014-01-16" dateValue is <2014-01-16 11:00:00 +0000>
@"2014.01.16" dateValue is <2014-01-16 11:00:00 +0000>
@"2014/01/16" dateValue is <2014-01-16 11:00:00 +0000>
@"2014 Jan 16" dateValue is <2014-01-16 11:00:00 +0000>
@"2014 Jan 16th" dateValue is <2014-01-16 11:00:00 +0000>
@"20140116" dateValue is <2014-01-16 11:00:00 +0000>
@"01-16-2014" dateValue is <2014-01-16 11:00:00 +0000>
@"01.16.2014" dateValue is <2014-01-16 11:00:00 +0000>
@"01/16/2014" dateValue is <2014-01-16 11:00:00 +0000>
@"16 January 2014" dateValue is <2014-01-16 11:00:00 +0000>
@"01-16-2014 17:05:05" dateValue is <2014-01-16 16:05:05 +0000>
@"01-16-2014 T 17:05:05 UTC" dateValue is <2014-01-16 17:05:05 +0000>
@"17:05, 1 January 2014 (UTC)" dateValue is <2014-01-01 16:05:00 +0000>
eppz!kit の一部、カテゴリを取得 NSString + EPPZKit.h GitHubから。
元の回答:文字列に含まれる日付形式がわからない(または気にしない)かどうかにかかわらず、日付の解析にNSDataDetectorを使用します。
//Role players.
NSString *dateString = @"Wed, 03 Jul 2013 02:16:02 -0700";
__block NSDate *detectedDate;
//Detect.
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingAllTypes error:nil];
[detector enumerateMatchesInString:dateString
options:kNilOptions
range:NSMakeRange(0, [dateString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{ detectedDate = result.date; }];
TouchTimeをチェックしてみてください。
https://github.com/jheising/TouchTime 。
これは、CocoaおよびiOSのPHPのすばらしいstrtotime関数の直接ポートです。日付または時刻文字列の任意の形式を取り込んでNSDateに変換します。
うまくいけば、楽しんでください!