2011-03-14 20 views

cevap

15
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:day1]; 
NSDate *day3 = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:day2]; 
day3 = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:day3 options:0]; 

Kaynaklar:

  1. NSDateComponents Class Reference
+1

gibi diyebilirsin daha genel bir yaklaşım

@implementation NSDate (Additions) - (void)assignFlags:(NSUInteger)unitFlags to:(NSDateComponents *)components { NSDateComponents *myComponents = [[NSCalendar currentCalendar] components: unitFlags fromDate: self]; if (unitFlags & NSYearCalendarUnit) [components setYear: [myComponents year]]; if (unitFlags & NSMonthCalendarUnit) [components setMonth: [myComponents month]]; if (unitFlags & NSDayCalendarUnit) [components setDay: [myComponents day]]; if (unitFlags & NSHourCalendarUnit) [components setHour: [myComponents hour]]; if (unitFlags & NSMinuteCalendarUnit) [components setMinute: [myComponents minute]]; if (unitFlags & NSSecondCalendarUnit) [components setSecond: [myComponents second]]; } - (NSDate *)dateByTakingComponents:(NSUInteger)unitFlags fromDate:(NSDate *)date { NSUInteger allFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDateComponents *allComponents = [[NSDateComponents alloc] init]; [date assignFlags: unitFlags to: allComponents]; [self assignFlags: allFlags & ~unitFlags to: allComponents]; NSDate *result = [[NSCalendar currentCalendar] dateFromComponents: allComponents]; [allComponents release]; return result; } @end 

olduğunu currentCalendar değerini UTC zaman dilimi olarak ayarlamanızı öneririz. –

0

Bir NSCalendar oluşturmanız ve sonra bileşenleri ilk ve ikinci tarihten itibaren almanız ve daha sonra yeni tarih bileşenlerini NSCalendar öğesinden almanız gerekir.

kullanımlar NSCalendar yöntemleri

– components:fromDate: 
– dateFromComponents: 

ve karşılık gelen birim bayrakları

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit; 
1

Bu darvids0n gibi kompakt değil, ancak çalışır.

NSDate* day1 = [datePicker dateValue]; 
NSDate* day2 = [NSDate date]; 

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:day1; 
NSInteger day = [components day];  
NSInteger month = [components month]; 
NSInteger year = [components year]; 

components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit fromDate:day2]; 
NSInteger hour = [components hour];  
NSInteger minute = [components minute]; 
NSInteger second = [components second]; 

NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; 
[comps setDay:day]; 
[comps setMonth:month]; 
[comps setYear:year]; 
[comps setHour:hour]; 
[comps setMinute:minute]; 
[comps setSecond:second]; 
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *day3 = [cal dateFromComponents:comps]; 

veya kayıtlarla ilgili

NSDateFormatter *tempFormatter = [[[NSDateFormatter alloc]init]autorelease]; 
[tempFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSString* message = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second]; 
NSDate *day3 = [tempFormatter dateFromString:message]; 
0

, burada sen yaz I sorunları önlemek için bu

NSDate *day3 = 
    [day2 dateByTakingComponents: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit 
         fromDate: day1];