2016-03-31 19 views
1

'da ayrıştırmaya çalışırken hata April from 04 (MM)'u Apr (MMM)'a dönüştürmeye çalışırken nil'a döndü, bu iOS'ta bilinen bir sorun mu yoksa yanlış bir şey mi yapıyorum?Nesne-C

İşte muayene için benim kod:

NSString *[email protected]"2016-04-01"; 
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSDate* myDate = [dateFormatter dateFromString:dateString]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MMM"]; 
NSString *stringFromDate = [formatter stringFromDate:myDate]; 
NSLog(@"%@ == %@",dateString,stringFromDate); 

zaman değişiklik [email protected]"2015-04-01" Bu benim çıkış olduğunu Apr

stringFromDate döner:

this is the log image

2016-04-01 12 : 17: 45.708 [32172: 2389414] 2016- 04-01 == (boş)

2016-04-01 12: 17: 47,446 [32172: 2389414] 2015/04/01 == Nisan

+0

Neden değil myDate günlüğe kaydediliyor mu? dateFromString, stringFromDate'den çok daha pickier olduğundan, myDate'in daha büyük olasılıkla problemi olur. – gnasher729

+0

Dizinizde görünmez karakterler olup olmadığını kontrol ederim. – Eiko

+0

Hangi ülkedesiniz? Bu, kullandığınız belirli bir zaman dilimini bulmamıza yardımcı olur. – Sulthan

cevap

1

Ben kodunuzu çalıştı ve bu beni boş verir 2022 yılı için, ancak 2018,2020 yıllarında Apr ... tuhaf geliyor!

NSString *[email protected]"2022-04-01"; 
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSDate* myDate = [dateFormatter dateFromString:dateString]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"+5:30"]]; 
[dateFormatter setDateFormat:@"MMM"]; 
NSString *stringFromDate = [dateFormatter stringFromDate:myDate]; 
NSLog(@"%@ == %@",dateString,stringFromDate); 

enter image description here

GÜNCELLEME:

bu şekilde dize ayrıştırmak edin: Çünkü Ürdün kaymıştır edilecektir saatini Gün ışığından yararlanma 2016-04-01 01:00

+ 1 saat yani evrende böyle bir zaman yok: 2016-04-01 00:00

Bu sh nil nesnesiyle ilgili sorunları çözebilir.

+0

ur kodunu gösterebilir –

+0

myDate nesnesi nil çocuklar ... neden nil ?! –

+0

bu zaman dilimini ekle [NSTimeZone timeZoneForSecondsFromGMT: 0]; 'sulthan cevabına göre, bir kez dene –

2

Bu, muhtemelen saat diliminizde bir sorundur. Bir tarihin zaman olmadan ayrıştırılmasında, zamanın sıfır olduğu varsayılır. Bununla birlikte, belirli günlerde, genellikle Yaz Saati Uygulamasının (Mart ayında dünyada gerçekleşen değişiklikler) veya belirli yerel zaman değişikliklerinden dolayı belirli zamanları yoktur. Örneğin, Ürdün'de DST değişimi Apr 1 2016, 00:00 => Apr 1 2016, 01:00 şeklindedir. Bu, Apr 1 2016, 00:00 zamanınınhemen Apr 1 2016, 01:00 haline gelmesi nedeniyle mevcut olmadığı anlamına gelir. Tarih yoksa, tarih biçimlendirici nil değerini döndürmelidir. Genellikle bu sorun yok önceden ayarlanmış GMT saat dilimini kullanarak sorunu çözebilirsiniz

, örneğin

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

zaman ayrıştırma olmadığı için, saat dilimi farkları sizi etkilememesi gerektiğini unutmayın.

Adımlar

Ürdün zaman dilimine makinenizde zaman dilimi ayarlayın çoğaltmak: saat dilimi düzeltme ile enter image description here

NSString *dateString = @"2016-04-01"; 
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init]; 
parsingFormatter.dateFormat = @"yyyy-MM-dd"; 

NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "(null)" 

:

NSString *dateString = @"2016-04-01"; 
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init]; 
parsingFormatter.dateFormat = @"yyyy-MM-dd"; 
parsingFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "2016-04-01 00:00:00 +0000" 
+0

no man, ayrıştırmayla ilgili bir sorun yok, myDate nesnesini nil! –

+0

@AhmedAwad vererek ve kodumu denediniz mi? Not etmelisiniz * ayrıştırmadan önce *. – Sulthan

+0

Not: Bu, her iki tarih biçimlendiricinin farklı zamanları olduğunda, genellikle beklenen sonucu vermeyebilir. Bu gerçekten NSDate için bir durum değil, tarih bileşenleri için. :) – Eiko