我有NSDate* day1
和NSDate* day2
。如何从第1天开始仅复制年/月/日,从第2天复制小时/分钟/秒?
答案 0 :(得分:17)
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];
来源:
答案 1 :(得分:1)
它不像darvids0n那样紧凑,但它有效。
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];
或
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];
答案 2 :(得分:0)
您需要创建一个NSCalendar,然后从第一个和第二个日期获取日期组件,然后使用NSCalendar中的新日期组件获取日期。
使用NSCalendar方法
– components:fromDate:
– dateFromComponents:
和相应的单位标志
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit;
答案 3 :(得分:0)
对于记录,这是一种更通用的方法
@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
你可以这样称呼它
NSDate *day3 =
[day2 dateByTakingComponents: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate: day1];
答案 4 :(得分:0)
更新Swift 4& 4.1 强>
func combineDateAndTimeToOneDateForAPI() {
let datefrmter = DateFormatter()
datefrmter.dateFormat = "dd/MM/yyyy"
let dateFromString = datefrmter.date(from: lblDate.text!)
datefrmter.dateFormat = "h:mm a"
let timeFromString = datefrmter.date(from: lblTime.text!)
let calendar = NSCalendar.current
let componentsOne = calendar.dateComponents([.year,.month,.day], from: dateFromString!)
let componentsTwo = calendar.dateComponents([.hour,.minute,.second,.nanosecond], from: timeFromString!)
let totalComponents = NSDateComponents()
totalComponents.year = componentsOne.year!
totalComponents.month = componentsOne.month!
totalComponents.day = componentsOne.day!
totalComponents.hour = componentsTwo.hour!
totalComponents.minute = componentsTwo.minute!
totalComponents.second = componentsTwo.second!
totalComponents.nanosecond = componentsTwo.nanosecond!
let finalDate = calendar.date(from: totalComponents as DateComponents)
print(finalDate)
}