2016-03-20 16 views
1

Belirli bir tarih için tarih biçimlendiricim dönüş tarihi: "20 Mar, 1998".NSDateFormatter dateFromString, belirli bir tarihte için nil değerini döndürür

+ (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]; 
} 

Ben tarihleri ​​yakınında kontrol ettik ve tüm doğru iade edilen:

  • "20 Mar, 1997"
  • "20 Mar, 1999"
  • "21 Mar, 1998"
  • "19 Mar, 1998"

enter image description here

Yerel ayarım "en_US".

Kullanılması [NSDateFormatter getObjectValue: forString: aralığı: Hata:]:

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

Yerel ayarınızı belirtebilir misiniz? – Sulthan

+0

Soruyu yerel ayarlarla güncelledim. – Misha

+0

Sorunu yeniden oluşturamıyorum, kodunuzun 'MMM dd, yyyy' dalından geçmediğinden emin misiniz? – Sulthan

cevap

2

Bu kez değişiklik kaydedildikten günde ışık vardı İsrail'de timeZone ilişkilidir (http://timeanddate.com/time/change/israel/karmiel?year=1998 bakınız) bana hata alır.

Saat dilimini GMT değiştirme:

formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0] 

sorunu çözmek gerekir.

+0

Bu, sorunu giderdi. Teşekkür ederim. – Misha

+0

Tabii ki, ortaya çıkan “NSDate” in, İsrail saat diliminizdeki 20 Mar, 1998'in ilk anından farklı bir zaman (ve belki takvim tarihi) olacağını unutmayın. Zamanında hangi hassas anı gerçekten ilgilendiriyorsunuz?Aynı takvimde ve UTC'de yorumlandığı gibi aldığınız tarihten itibaren bir "NSDateComponents" oluşturmak isteyebilirsiniz, ardından bu bileşenlerden yeni saat diliminizi kullanarak yeni bir "NSDate" oluşturun. –

İlgili konular