2016-03-18 17 views
-1

Bu tarih biçimi "2016-03-16" ile NSString'e sahibim ve aynı tarihi NSDate biçiminde ancak "2016-03-15 18:30:00 +0000" şeklinde döndürmek için aşağıdaki kodu ekledim. NSDate'de "2016-03-16" ile aynı şeyi nasıl yaparım?NSDateFormatter ios'da yanlış tarih gösteriyor mu?

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    dateFormatter.dateFormat = @"yyyy-MM-dd"; 
    NSString *datePart = [dateFormatter stringFromDate:dateFromString];//2016-03-16 

    NSDate *dateValue = [dateFormatter dateFromString:datePart]; 
    NSLog(@"%@----",dateValue); //" 2016-03-15 18:30:00 +0000 
+1

NSDate çoğu kişinin tarih ve saat olarak belirttiği EXACT tarihlerini temsil eder. 16 Mart, bir tarih ve saatin hatalı bir tanımıdır. Sistem, varsayım, cihaz için 3/16 üzerinde 12 am demek olduğunu ve GMT'de o tarih ve saati döndürdüğünü gösterir. Sorunu kodla çözmeden önce, uygulamanızda tam olarak ne zaman istediğinizi anladığınızdan emin olun. – danh

+0

http://stackoverflow.com/questions/17294289/unexpected-value-from-nsdate/17296378#17296378 –

cevap

5

Yerel saat dilimi yardımıyla NSDate örneğinden dize değerini almak gerekir muhtemelen UTC + 5'tir. Bir tarih belirtiyorsunuz ama bir zaman değil, bu yüzden zamanın gece yarısı olduğu ima ediliyor. Yerel saat diliminizdeki saat 16: 00'da, UTC saatinde bir önceki gün (saat 15: 30), bu nedenle "2016-03-15 18:30:00 +0000"

Oturum açtığınızda NSLog(@"%@----",dateValue) ile tarihi UTC kullanarak tarihi görüntüleyen [dateValue description]'u çağırıyorsunuz.

NSLog(@"%@----",[dateValue descriptionWithCalendarFormat:nil timeZone:[NSTimeZone localTimeZone] locale:nil])'u kullanabilirsiniz ve tarihi saat diliminizde görebilirsiniz.

description ve descriptionWithCalendarFormat yöntemleri gibi ilişkili yöntemlerin yalnızca hata ayıklama için olduğunu unutmayın, tarihleri ​​dizelere dönüştürmek için bir NSDateFormatter kullanmalısınız. iOS_Binod'un cevabı bunu yapmanın bir yolunu gösterir.

+1

tamamlandı, anlaşıldı ve hatta hafif bir anlam ifade etmedi veya ırkçı değildi. +1 – danh

2

Tarih formatlayıcı, varsayılan olarak yerel saat diliminizi kullanır. -[NSDate description] yöntemi (%@ çağrıları) UTC'yi kullanır. Bu yüzden dizeler farklıdır.

+0

Hiçbir şey anlamadım – Bangalore

+1

Sonra oku ve öğren. Çoğunlukla öğren. UTC için Google. Aynı zamanda UTC ile neredeyse aynı olmayan GMT için de Google'a bakabilirsiniz. Dünyanın büyük ve yuvarlak olduğunu ve saat dilimlerinin olduğunu biliyor musun? – gnasher729

3

Konsolda NSDate örneğini yazdırmayı deneyin. Bu, kodunuzun konsoldaki varsayılan biçim değerini yazdırmasıdır. 30:

Bu yöntemle [your_dateformater stringFromDate:dateInstance]

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd"; 
NSString *datePart = @"2016-03-16"; 
NSDate *dateValue = [dateFormatter dateFromString:datePart]; 
NSLog(@"string convert into Date is - %@",[dateFormatter stringFromDate:dateValue]);