如何在iPhone sdk中获取当前日期的下一个和更早的日期

rkb*_*rkb 2 iphone

我有一个约会对象,

NSDate*date = [NSDate date];

现在我想要在此日期之前和之后的日期.我应该使用什么功能.

早期和晚期意味着前一天和后一天.

此外,我尝试使用earlyDate但可能是我使用它错了,因为它返回相同的日期.

TNX.

Rog*_*Rog 6

您需要使用NSCalendar和NSDateComponents可靠地执行此计算.

这是我今天要为中午计算NSDate的一个例子.我相信你可以找出如何从这个和文档中获得你想要的结果.

NSDate *today = [NSDate date];

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDateComponents* todayComponents = [gregorian components:unitFlags fromDate:today];

todayComponents.hour = 12;

NSDate* noonToday = [gregorian dateFromComponents:todayComponents];
Run Code Online (Sandbox Code Playgroud)


Lou*_*arg 5

NSDate有点用词不当.这不是一个简单的日期,它是一个日期,具有亚秒级精度.earlyDate:方法是一个比较函数,它返回两个日期中较早的日期,它不会创建较早的日期.如果您关心的是您当前所关注的日期,您可以执行以下操作:

NSDate *earlierDate = [date addTimeInterval:-1.0];
Run Code Online (Sandbox Code Playgroud)

这将在日期前1秒返回日期.同样你可以做到

NSDate *laterDate = [date addTimeInterval:1.0];
Run Code Online (Sandbox Code Playgroud)

为将来1秒的日期.

如果您想要提前一天,您可以添加一天的秒数.当然这是近似的,除非你处理所有格里历日历问题,但如果你只是想快速近似:

NSDate *earlierDate = [date addTimeInterval:(-1.0*24*60*60)];
Run Code Online (Sandbox Code Playgroud)

这不适用于闰秒等,但对于大多数用途来说它可能很好.