2012-04-10 13 views
1

Ich möchte ein NSDate-Objekt mit NSDateComponents, aber die Stunde des NSDate ist 1 Stunde niedriger als in den Komponenten.NSDate Ergebnisse von - (NSDate *) DatumFromComponents: (NSDateComponents *) Comps

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[cal setLocale:[NSLocale currentLocale]]; 
[cal setTimeZone:[NSTimeZone localTimeZone]]; 
NSDateComponents *hourComp = [[NSDateComponents alloc] init]; 
hourComp.timeZone = [NSTimeZone localTimeZone]; 
[hourComp setHour:18]; 

NSLog(@"%@",hourComp); 
NSLog(@"%@",[cal dateFromComponents:hourComp]); 
NSLog(@"%@",[NSDate date]); 

Konsolenausgabe:

2012-04-10 19:10:57.505 TestDate[9861:f803] <NSDateComponents: 0x6b6ad30> 
TimeZone: Europe/Berlin (CEST) offset 7200 (Daylight) 
Hour: 18 
2012-04-10 19:10:57.507 TestDate[9861:f803] 0001-01-01 17:06:32 +0000 
2012-04-10 19:10:57.508 TestDate[9861:f803] 2012-04-10 17:10:57 +0000 

Was ich will, ist 18: xx: xx

Antwort

0

Ich nehme zur Kenntnis, dass Sie in Europa sind, und eine Stunde vor der GMT. Wenn Sie das Datum auf 18: xx einstellen, denkt es, dass Sie es in Europa einstellen, und subtrahiert es daher eine Stunde, bevor es in GMT gespeichert wird. Wenn Sie es ausdrucken, bitten Sie es nicht, für die lokale Zeit formatiert zu werden, also gibt es Ihnen GMT, der 17: xx ist.

Sie benötigen einen NSDateFormatter, verwenden und seine locale und Zeitzone einstellen - so wie Sie mit dem NSCalendar Objekt tat - und stringFromDate auf sie rufen, vorbei am Datum, das Sie erstellt haben.