Sam*_*Sam 17 iphone objective-c nsdate nsdatecomponents
我试图将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];
}
Run Code Online (Sandbox Code Playgroud)
这是控制台上的调试输出.注意hour,min,sec组件的值和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>
Run Code Online (Sandbox Code Playgroud)
提前致谢.
Dee*_*olu 31
你在toDateComponents这里生成日期,
NSDate *newDate = [cal dateFromComponents:toDateComponents];
Run Code Online (Sandbox Code Playgroud)
信息toDateComponents仅为日期,月份和年份.它没有时间细节.所以你得到了12:00:00 AM.您已存储时间信息toTimeComponents但未使用.如果你想要这个,你必须添加时间信息,toDateComponents并可能toTimeComponents完全删除变量.
[toDateComponents setHour:[fromTimeComponents hour]];
[toDateComponents setMinute:[fromTimeComponents minute]];
[toDateComponents setSecond:[fromTimeComponents second]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24326 次 |
| 最近记录: |