首页 文章

NSDate减去一个月

提问于
浏览
19

我想要两个NSInteger一年,一个月回去一个月 . 例如现在是 2011-01 我怎么能得到 2010-12 . 添加是一回事,但我想减去 .

NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
NSInteger year = [dateComponents year];
NSInteger month = [dateComponents month];
[calendar release];
NSString * pdf_name = [NSString stringWithFormat:@"file_%d_%02d.pdf", year, month];

迎接endo

EDIT: My solution

NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
 NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

 NSDate *date = [NSDate date];
 NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
 NSInteger year = [dateComponents year];
 NSInteger month = [dateComponents month];

 BOOL substractOneMonth = YES;
 if (substractOneMonth) {
  if (month==1) {
   year--;
   month = 12;
  }else {
   month--;
  }
 }
 [calendar release];

 NSString * pdf_name = [NSString stringWithFormat:@"file_%d_%02d.pdf", year, month];

4 回答

  • 1

    此示例代码来自iPhone的日期和时间编程指南 .

    NSDate *today = [[NSDate alloc] init];
    NSLog(@"%@", today);
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
    [offsetComponents setMonth:-1]; // note that I'm setting it to -1
    NSDate *endOfWorldWar3 = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0];
    NSLog(@"%@", endOfWorldWar3);
    

    我希望这有帮助!

  • 5

    虽然接受的答案有效,但它使用iOS 8.0中折旧的代码 . 在不使用弃用代码的情况下执行相同操作的另一种方法如下:

    NSDate *date = [NSDate date];
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setMonth:-1];
    date = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:date options:0];
    
  • 57

    我建议为此目的创建一个扩展:

    extension Date {
    
        func adding(months: Int) -> Date? {
            let calendar = Calendar(identifier: .gregorian)
    
            var components = DateComponents()
            components.calendar = calendar
            components.timeZone = TimeZone(secondsFromGMT: 0)
            components.month = months
    
            return calendar.date(byAdding: components, to: self)
        }
    
    }
    

    用法:

    let now = Date()
    let sixMonthsBefore = now.adding(months: -6)
    let threeMonthsAfter = now.adding(months: 3)
    
  • 5
    NSDate *date = [NSDate date];
    NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
    NSInteger year = [dateComponents year];
    NSInteger month = [dateComponents month];
    
    month -= month - 1;
    
    if (month < 1) {
     year -= 1;
     month = 12;
    }
    
    [calendar release];
    NSString * pdf_name = [NSString stringWithFormat:@"file_%d_%02d.pdf", year, month];
    

相关问题