J'essaie de modifier le composant hh, mm, ss d'une NSDate en celui d'une autre NSDate - mais pour une raison quelconque, l'heure est fixée à minuit. Je n'arrive pas à comprendre pourquoi !
Voici le code ;
+ (NSDate *) fixTime:(NSDate*)fromDate toDate:(NSDate *) toDate {
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone localTimeZone]];
[cal setLocale:[NSLocale currentLocale]];
NSLog(@"fromDate=<%@>", [fromDate descriptionWithLocale:[NSLocale currentLocale]]);
NSLog(@"toDate= <%@>", [toDate descriptionWithLocale:[NSLocale currentLocale]]);
NSDateComponents *fromTimeComponents = [cal components:( NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit ) fromDate:fromDate];
NSDateComponents *toDateComponents = [cal components:( NSYearCalendarUnit |
NSMonthCalendarUnit |
NSDayCalendarUnit ) fromDate:toDate];
NSDateComponents *toTimeComponents = [cal components:( NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit ) fromDate:toDate];
[toTimeComponents setHour:[fromTimeComponents hour]];
[toTimeComponents setMinute:[fromTimeComponents minute]];
[toTimeComponents setSecond:[fromTimeComponents second]];
NSLog(@"toDateComponents year = %d", [toDateComponents year]);
NSLog(@"toDateComponents mon = %d", [toDateComponents month]);
NSLog(@"toDateComponents day = %d", [toDateComponents day]);
NSLog(@"toTimeComponents hour = %d", [toTimeComponents hour]);
NSLog(@"toTimeComponents min = %d", [toTimeComponents minute]);
NSLog(@"toTimeComponents sec = %d", [toTimeComponents second]);
NSDate *newDate = [cal dateFromComponents:toDateComponents];
NSLogDebug(@"newDate=<%@>", [newDate descriptionWithLocale:[NSLocale currentLocale]]);
return [[newDate retain] autorelease];
}
et voici la sortie de débogage sur la console. Notez les valeurs des composants hour, min, sec et la valeur finale de newDate :
<Util.m:229> fromDate=<Monday, July 11, 2011 10:35:00 PM Pacific Daylight Time>
<Util.m:230> toDate= <Saturday, July 23, 2011 9:35:00 PM Pacific Daylight Time>
<Util.m:255> toDateComponents year = 2011
<Util.m:256> toDateComponents mon = 7
<Util.m:257> toDateComponents day = 23
<Util.m:258> toTimeComponents hour = 22
<Util.m:259> toTimeComponents min = 35
<Util.m:260> toTimeComponents sec = 0
<Util.m:266> newDate=<Saturday, July 23, 2011 12:00:00 AM Pacific Daylight Time>
Merci d'avance.