将日子添加到NSDate
我想添加date到一个date,我得到了许多代码,但没有人为我在下面显示是我的代码,请有人帮我解决这个问题
int daysToAdd=[[appDlegateObj.selectedSkuData objectForKey:@"Release Time"] intValue]; NSTimeInterval secondsForFollowOn=daysToAdd*24*60*60; NSString *dateStr=[contentDic objectForKey:@"Date"]; NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSDate *dateFromString=[[NSDate alloc]init]; dateFromString=[dateFormatter dateFromString:dateStr]; [dateFormatter release]; NSDate *date=[dateFromString dateByAddingTimeInterval:secondsForFollowOn];
// Initialize stringified date presentation NSString *myStringDate = @"2011-11-17"; // How much day to add int addDaysCount = 30; // Creating and configuring date formatter instance NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; // Retrieve NSDate instance from stringified date presentation NSDate *dateFromString = [dateFormatter dateFromString:myStringDate]; // Create and initialize date component instance NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; [dateComponents setDay:addDaysCount]; // Retrieve date with increased days count NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:dateFromString options:0]; NSLog(@"Original date: %@", [dateFormatter stringFromDate:dateFromString]); NSLog(@"New date: %@", [dateFormatter stringFromDate:newDate]); // Clean up [dateComponents release], dateComponents = nil; [dateFormatter release], dateFormatter = nil;
输出:
Original date: 2011-11-17 New date: 2011-12-17
NSDate *now = [NSDate date]; int daysToAdd = 1; NSDate *newDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
使用iOS 8和10.9,现在可以更容易地做到这一点。 您可以添加任何数量的任何日历单位的date。 我在NSDate上声明了一个非常小的类别方法,使其更快(因为我只需要在整个应用程序中添加几天)。 下面的代码。
-(NSDate *)addDaysToDate:(NSNumber *)numOfDaysToAdd { NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:self options:nil]; return newDate; }
关键的事情:NSCalendarUnitDay是我曾经让它知道我想添加天。 您可以将其更改为其他枚举值,如月或年。
由于它是NSDate的一个类别,我将这个值添加到自我。 如果你不想声明一个类别,你只需要在方法参数中使用一个date,如:
-(NSDate *)addDays:(NSNumber *)numOfDaysToAdd toDate:(NSDate *)originalDate { NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:originalDate options:nil]; return newDate; }
我使用一个NSNumber,但你可以很容易地使用一个NSInteger。
最后,在Swift中:
func addDaysToDate(daysToAdd: Int, originalDate: NSDate) -> NSDate? { let newDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: daysToAdd, toDate: originalDate, options: nil) return newDate }
如果你想摆脱NSDate? 并觉得解开一个可能的零(date添加可能会失败)的舒适,你可以只返回newDate! 并摆脱? 标记。
NSDateComponents *offsetComponents = [[NSDateComponents alloc] autorelease]; [offsetComponents setDay:1]; newDate = [[[CalendarContainer sharedCalendarContainer] gregorian] dateByAddingComponents:offsetComponents toDate:currentlyDisplayedDate options:0];
您可以通过添加时间间隔来为NSDate添加date
NSDate* newDate = [date dateWithTimeInterval:3600*24*numberOfDays sinceDate:otherDate];
虽然如果你想真的准确的,并考虑闰秒,日光节约时间和所有这些你可能想要使用NSDateComponents date和时间编程指南和Omtara的链接中所述 。
我build议你阅读这篇文章,以获得更清洁的解决scheme
在Swift 2.1.X和xcode 7.1 OSX 10.10.5中,可以使用函数向前和向后添加任意天数
func addDaystoGivenDate(baseDate:NSDate,NumberOfDaysToAdd:Int)->NSDate { let dateComponents = NSDateComponents() let CurrentCalendar = NSCalendar.currentCalendar() let CalendarOption = NSCalendarOptions() dateComponents.day = NumberOfDaysToAdd let newDate = CurrentCalendar.dateByAddingComponents(dateComponents, toDate: baseDate, options: CalendarOption) return newDate! }
函数调用将当前date递增9天
var newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: 9) print(newDate)
函数调用当前date减less80天
newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: -80) print(newDate)
在Swift 2中,使用extension
来扩展NSDate:
extension NSDate { func addDays(days:Int) -> NSDate{ let newDate = NSCalendar.currentCalendar().dateByAddingUnit( .Day, value: days, toDate: self, options: NSCalendarOptions(rawValue: 0)) return newDate! } }
NSDate *Date=[datePicker date]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"dd.MM.yy EEEE h:mm a"];