写逻辑日期差异 - 新手

时间:2011-10-05 18:24:25

标签: iphone objective-c cocoa-touch

有没有办法按5减去当前日期。如果今天是2008-12-9,我需要在5天前获得日期。如果我们输出此日期,则日期应显示为2008-12-4

我如何以编程方式编码?或者是一个有用的教程

4 个答案:

答案 0 :(得分:3)

始终使用NSCalendar和NSDateComponents进行日期计算。这将考虑到2月份29天的闰年,闰秒和夏令时变化等奇怪现象。

NSDate *date = [NSDate date]; // Using current date here
NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *components = [[NSDateComponents alloc] init];

components.day = - 5; // Find date for 5 days ago

NSDate *newDate = [calendar dateByAddingComponents:components toDate:date options:0];

答案 1 :(得分:2)

使用NSDateComponents

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *offsetComponents = [[[NSDateComponents alloc] init] autorelease];
[offsetComponents setDays:-5];

NSDate *fiveDaysAgo = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0];

将其转换为首选格式的字符串,请使用NSDateFormatter

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSString *formattedDateString = [dateFormatter stringFromDate:fiveDaysAgo];

答案 2 :(得分:-1)

这是一种蛮力的方式:

  1. 5持续DAY
  2. 如果DAY < 0,请添加上个月的天数,并从1中提取MONTH
  3. 如果MONTH < 0,请添加一年中的月份数并从1中提取YEAR
  4. 蛮力方法的优势在于它适用于所有语言。

答案 3 :(得分:-1)

#define SOME_HOUR -24*5

NSDate *today = [NSDate date];

NSDate *someDay = [NSDate dateWithTimeInterval:60*60*SOME_HOUR sinceDate:today];