2010-12-01 9 views
5

私は2010年10月11日午後12時00分○○秒なぜNSCalendarのdateFromComponentsが間違った日付を返しますか?

を期待していしかし、その代わりに、私は数時間を追加することができ、私が知っている2010年10月10日21時〇〇分00秒0000

を受け、希望の日付を受け取りますが、私は21時間前の日を取得する理由を理解していません...

助けてください!

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]; 

答えて

15

あなたの問題は、NSTimeZoneを設定することで解決できると思います。

+3

を必要とするを使用します! \t [cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@ "GMT"]];問題を解決しました –

+0

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

0

特定の時刻形式が必要な場合は、そのフォーマッタを使用するか、正しい時刻を取得するためにこの形式を使用します。最初のオプション...

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

たり、コンポーネントから日付を必要とする場合は、以下のコードのような...

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

か、はい、あなたは正しいです

関連する問題