2016-03-20 8 views
1

私の日付フォーマッターは、特定の1つの日付についてnilを返します: "20 Mar、1998"。NSDateFormatter dateFromStringは、特定の1つの日付に対してnilを返します。

+ (NSDate*)dateFromString:(NSString*)date 
{ 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setLocale:[NSLocale currentLocale]]; 
    if ([WPRConverter isUropeanMetrics]) 
     [df setDateFormat:@"dd MMM, yyyy"]; 
    else 
     [df setDateFormat:@"MMM dd, yyyy"]; 
    return [df dateFromString:date]; 
} 

私は日付の近くにチェックしましたし、すべてが正しく返される:

  • "1997年3月20日"
  • "1999年3月20日"
  • "1998年3月21日"
  • "1998年3月19日"

enter image description here

ロケールは "en_US"です。

使い方[NSDateFormatter getObjectValue:forString:範囲:エラー:]:

The value “20 Mar, 1998” is invalid. FailureReason: The value “20 Mar, 1998” is invalid. RecoverySuggestion: Please provide a valid value. RecoveryOptions: Code: 2048

+0

ロケールを指定してください。 – Sulthan

+0

ロケールで質問を更新しました。 – Misha

+0

私は問題を再現できません。あなたのコードは 'MMM dd、yyyy'ブランチを通過しないのですか? – Sulthan

答えて

2

これは、時間の変更を保存日間の光を持っていたイスラエルのtimeZoneに関連している(http://timeanddate.com/time/change/israel/karmiel?year=1998を参照してください)私のエラーを取得します。

GMTにタイムゾーンを変更する:

formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0] 

は、問題を修正する必要があります。

+0

これで問題は解決しました。ありがとうございました。 – Misha

+0

もちろん、あなたのイスラエルのタイムゾーンでは、結果として得られる「NSDate」は1998年3月20日の最初の瞬間とは異なる時刻(そしてカレンダーの日付)になることに注意してください。正確な瞬間は本当に興味がありますか?取得した日付から、同じカレンダーとUTCで解釈されたNSDateComponentsを作成し、元のタイムゾーンを使用してこれらのコンポーネントから新しいNSDateを作成することができます。 –

関連する問題