【问题标题】:xcode NSCalendarUnit shows 3 month aheadxcode NSCalendarUnit 提前 3 个月显示
【发布时间】:2013-05-07 18:44:52
【问题描述】:

我正在尝试计算当月的天数

      today = [NSDate date];

    NSLog(@"%@", today);

    //calculate how much days in current month

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSRange days = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today];
    NSUInteger numberOfDaysInMonth = days.length;

    NSLog(@"%d Days in month:%i", numberOfDaysInMonth, NSMonthCalendarUnit);

   // end calculating

在日志中显示的是八月而不是五月

为什么会这样?我错过了什么?

谢谢

2013-05-07 21:39:01.344 NsTimer[89023:c07] 2013-05-07 18:39:01 +0000 2013-05-07 21:39:01.345 NsTimer[89023:c07] 31 天数:8

回答:

谢谢@artur

这是一个正确的代码

    today = [NSDate date];

    NSLog(@"%@", today);

    //calculate how much days in current month

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    int units = NSMonthCalendarUnit;
    NSDateComponents *comps = [cal components:units fromDate:today];
    NSRange days = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today];
    NSUInteger numberOfDaysInMonth = days.length;

    NSLog(@"%d Days in month:%i", numberOfDaysInMonth, comps.month);

   // end calculating

日志现在显示:

2013-05-07 22:25:04.855 NsTimer[89623:c07] 2013-05-07 19:25:04 +0000
2013-05-07 22:25:04.856 NsTimer[89623:c07] 31 Days in month:5

【问题讨论】:

    标签: xcode nsdate nscalendar


    【解决方案1】:

    您将 NSMonthCalendarUnit 记录为整数 (%i)。它只是枚举标志值,意外为8。要显示月份数,您应该使用[[calendar components:NSMonthCalendarUnit fromDate:today] month]提取它。

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 2021-12-05
      • 1970-01-01
      • 2016-07-03
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多