NSDateのhh、mm、ssコンポーネントを別のNSDateのコンポーネントに変更しようとしていますが、何らかの理由で、時刻が何らかの理由で深夜に設定されています。理由がわからない!
これがコードです。
+ (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];
}
これがコンソールのデバッグ出力です。時間、分、秒のコンポーネントの値と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>
前もって感謝します。
ここでtoDateComponents
の日付を生成しています。
NSDate *newDate = [cal dateFromComponents:toDateComponents];
toDateComponents
の情報は、日付、月、年のみです。時間の詳細はありません。だからあなたは12:00:00 AM
。時間情報をtoTimeComponents
に保存しましたが、使用されていません。これを機能させたい場合は、時間情報をtoDateComponents
に追加し、おそらくtoTimeComponents
変数を完全に削除する必要があります。
[toDateComponents setHour:[fromTimeComponents hour]];
[toDateComponents setMinute:[fromTimeComponents minute]];
[toDateComponents setSecond:[fromTimeComponents second]];