2017-09-23 12 views
0

指定されたフォーマッタで日付オブジェクトを作成しようとしていますが、日付formatter_datefromstringメソッドはnilを返します。明確なドキュメントのサンプルを私に教えてください。解析しようとしている文字列は、「2017年9月24日午前2時00分」です。事前に感謝しますNSDateFormatterはdatefromstringメソッドを呼び出すときにnilを返しますか?

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
    [dateFormat setLocale:[NSLocale currentLocale]]; 
    [dateFormat setDateFormat:@"h:mm a Z 'on' MMMM d, yyyy"]; 
    NSLog(@"dateStr:==============> %@", dateStr); 
    NSDate *date = [dateFormat dateFromString:dateStr]; 
    NSLog(@"Date:------------->%@", date); 
    return date; 
+1

'dateStr'何が便利ですか? – vadian

+0

NSDateに変換しようとしている日付文字列を指定します。 –

+0

あなたのデバイス/シミュレータは英語に設定されていますか? – rmaddy

答えて

1

間違ったタイムゾーン指定子を使用しています。 Zは、-0800などのタイムゾーン用です。 PDTのような短いタイムゾーンの省略形については、zが必要です。

また、フォーマッタのローカルをcurrentLocaleに設定し、タイムゾーンをsystemTimeZoneに設定する理由はありません。また、解析している文字列にタイムゾーン情報が含まれている場合、フォーマッタのタイムゾーンは無関係です。あなたは英語であり、固定形式の日付文字列を解析しているので

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"h:mm a z 'on' MMMM d, yyyy"]; 
NSLog(@"dateStr:==============> %@", dateStr); 
NSDate *date = [dateFormat dateFromString:dateStr]; 
NSLog(@"Date:------------->%@", date); 
return date; 

しかし、あなたは本当にen_US_POSIXの特別なロケールにフォーマッタのロケールを設定する必要があります。これにより、ユーザーのロケールに関係なく英語の月の名前が確実に処理されます。

[dateFormat setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
+0

ありがとうございます....それは私のために働いた – Saiteja

+0

喜んで助けてください。あなたの問題を解決する答えを受け入れることを忘れないでください。これはあなたの質問が解決されたことを人々に知らせる。 – rmaddy

0

dateStrの日付形式と指定した形式が同じかどうかを確認できますか?両方が同じ書式でない場合は、オブジェクトは取得されません。下記の例でdateStr形式を試してください。コンソールで

NSString *dateStr = @"10:23 am Z on September 30, 2017"; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
[dateFormat setLocale:[NSLocale currentLocale]]; 
[dateFormat setDateFormat:@"h:mm a Z 'on' MMMM d, yyyy"]; 
NSLog(@"dateStr:==============> %@", dateStr); 
NSDate *date = [dateFormat dateFromString:dateStr]; 
NSLog(@"Date:------------->%@", date); 

あなたは 2017年9月23日09得るでしょう:54:04.654597 + 0530日[4068:79926]関数datestr:==============> 10: 2001年9月30日23:00のZ、 、2017-09-23、09:54:04.657359 + 0530日付[4068:79926]日付:-------------> Sat Sep 30 15:53: 00 2017

+0

質問を確認してください。これには、解析される文字列の特定の例が含まれています。あなたの答えは異なるタイムゾーンを使用しています。 – rmaddy

0

以下のロケールを使用して、nil値を返さないようにします。

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

投票私のコードは、

+0

これは問題ではありません。 – rmaddy

+0

私は上記のような問題を抱えていました。ロケールを追加することで修正されました。私の問題は、デバイスの日付形式を12時間から24時間に変更するときです。 –

関連する問題