【问题标题】:Get the Week Number in iOS SDK在 iOS SDK 中获取周数
【发布时间】:2013-07-09 09:21:03
【问题描述】:

我想从日期获取一年中的周数。我尝试了以下代码,但给了我错误的周数。

我的周数代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"YYYY-MM-dd"];
    NSDate *date = [dateFormatter dateFromString:@"2012-09-15"];


    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); //Display 38 instead of 37
}

注意:如果我尝试使用[NSDate date],则显示正确。

帮我解决这个问题.. 谢谢,

【问题讨论】:

标签: objective-c nsdate


【解决方案1】:

目标C:

 NSCalendar *calendar = [NSCalendar currentCalendar];
 NSDateComponents *dateComponent = [calendar components:(NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
 NSLog(@"%@",dateComponent);

更新

 NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:date];
    NSLog(@"%@",dateComponent);

斯威夫特:

let calendar = NSCalendar.currentCalendar()
let dateComponent = calendar.components([.WeekOfYear, .Day, .Month, .Year], fromDate: NSDate(timeIntervalSinceNow: 0))
print("weekOfYear \(dateComponent.weekOfYear)")

斯威夫特 3 - 斯威夫特 5:

let component = Calendar.current.component(.weekOfYear, from: Date())
print("Week of Year \(component)")

【讨论】:

  • 感谢您的回复.. 但是当我尝试从上面看到的字符串中给出日期时,它返回错误的周数。
【解决方案2】:

ObjectiveC 中的更新代码使用 Xcode 版本 - 9.1 - :

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]];
    NSLog(@"%ld",(long)[dateComponent weekOfYear]);

【讨论】:

    【解决方案3】:

    斯威夫特 3: 您需要知道所选月份的最后一个Date。比检查本周的周数,这将是您每月的周数

    return Calendar.current.component(.weekOfMonth, from: lastDate ?? Date())
    

    【讨论】:

      【解决方案4】:

      [NSCalendar currentCalendar] 默认为您提供公历。你可以使用

      NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSISO8601Calendar];
      

      获取符合 ISO 08601 的日历,其中您的日期的周数为 37

      【讨论】:

      • 很抱歉,但对于 2012-09-25,它返回 38 而不是 39现在出了什么问题?
      • 尝试使用 - (void)setFirstWeekday:(NSUInteger)weekday 将日历的第一周设置为正确的值(我不知道是哪个..)
      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多