6

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

我的周数代码:

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]显示正确的。

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

4

4 回答 4

20

目标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)")
于 2013-07-11T07:50:45.053 回答
11

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

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

获取符合 ISO 08601 的日历,该日历的日期为第37周。

于 2013-07-11T07:58:24.373 回答
0

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

return Calendar.current.component(.weekOfMonth, from: lastDate ?? Date())
于 2016-12-02T10:02:01.307 回答
0

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

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]];
    NSLog(@"%ld",(long)[dateComponent weekOfYear]);
于 2017-11-16T12:09:18.040 回答