2010-12-01 15 views
5

Ben 2010-10-11 00:00:00Neden NSCalendar'ın dateFromComponents yanlış bir tarih döndürüyor?

bekliyorum Ama bunun yerine Biliyorum 2010-10-10 21:00:00 +0000

Birkaç saat ekleyebileceğiniz, alıp istenen tarihi al, ama neden 21 saat önce bir gün aldığımı anlamıyorum ...

Lütfen yardım edin!

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:2010]; 
[comps setMonth:10]; 
[comps setDay:11]; 

[comps setHour:0]; 
[comps setMinute:0]; 
[comps setSecond:0]; 

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *retDate = [cal dateFromComponents:comps]; 

cevap

15

Sorununuzun NSTimeZone ayarlanarak çözülebileceğini düşünüyorum.

+3

evet, haklısın gerek! \t [cal setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @ "GMT"]]; Sorun çözüldü –

+0

hmmm ... coool ... :) – KingofBliss

0

Belirli bir zaman biçimine ihtiyacınız varsa, bu biçimlendiriciyi kullanın veya doğru zaman almak için bunu yazın. İlk seçenek ...

let formatter = NSDateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
    let localDate = formatter.dateFromString("1989-10-17T05:00:00.000-0000") 

veya aşağıdaki kodu gibi kullanmak bileşenlerden tarihini gerekirse ...

let calendar = NSCalendar.currentCalendar() 
    calendar.timeZone = NSTimeZone(name: "GMT")! 
    let date = calendar.dateFromComponents(components) 

veya