繰り返し質問することを事前に謝罪したいと思いますが、他の解決策はまだ私のために働いていません。日付文字列をdateFromString関数に渡そうとするたびに、nilが返されます。私はiOS 7のアップデート以降に変更があったことをどこにも読んだことがありませんが、これがまだ同じように機能するかどうかに違いがある場合は、最新の状態です。
これは、文字列から日付を作成するために使用しているコードです。
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setLocale:[NSLocale systemLocale]];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
[dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault];
NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:dateString];
return date;
この問題を解決するために読んだすべてのソリューションに基づいてdateFormatを設定しましたが、これらの設定のいずれも問題によって解決していません。 systemLocaleは間違いなく英語用に設定されているため、問題は発生しません。
これは、dateFromStringに渡しているdateStringです。
Wednesday, October 9, 2013 at 2:40:29 PM Pacific Daylight Time
助けてくれてありがとう!
ここには2つの問題があります。
フォーマッターが期待する日付文字列の形式(@"yyyy-MM-dd hh:mm:ss"
)が、解析しようとしている日付文字列の形式(@"EEEE, MMMM d, yyyy 'at' h:mm:ss a zzzz"
)と異なります。
フォーマッタのロケールを[NSLocale systemLocale]
に設定すると、[dateFormat dateFromString:]
がnil
を返します。 [NSLocate currentLocale]
に設定します。
フォーマッタの完全なコードは次のとおりです。
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setLocale:[NSLocale currentLocale]];
[dateFormat setDateFormat:@"EEEE, MMMM d, yyyy 'at' h:mm:ss a zzzz"];
[dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault];
NSDate *date = [dateFormat dateFromString:dateString];
Nilを取得するさらに別の方法は、hh
を使用し、24時間制で時間数が12を超える場合、HH
(またはH
、ゼロ詰めの場合)。
あれは:
これについては@neilcoへのハットチップ(彼の回答の下のコメントを参照)。この回答が気に入ったら、彼も賛成投票してください。
NSDateFormatterドキュメント によると:
RFC 3339などの固定形式の日付を使用する場合は、dateFormatプロパティを設定して、形式文字列を指定します。
日付形式が2017-06-16T17:18:59.082083Z
の場合、dateFormat
プロパティは次のようになりますyyyy-MM-dd'T'HH:mm:ss.SSSSSSZ
。
Swift 3
let dateFormatter = DateFormatter()
let date = "2017-06-16T17:18:59.082083Z"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"
let result = dateFormatter.date(from: date) // 2017-06-16 17:18:59 +0000
日付形式が渡した文字列と一致しません。dateStringは、[dateFormat setDateFormat:@ "yyyy-MM-dd hh:mm:ss"]のように、この形式でなければなりません。
2013-10-09 02:40:29
nilは、dateFormatオブジェクトが文字列を解析できなかったことを意味します。
エスケープすることを忘れないでください"yyyy/MM/dd' 'HH:mm:ss"
スペース記号
DateFromStringを使用しようとしていますが、フォーマッタに渡したフォーマットが、dateStringで使用しているものと異なります。
この構成をdateFormatで使用してみてください:E',' M d',' yyyy 'at' hh:mm:ss aa z