繁体   English   中英

在Objective-C中获取星期的第一天和最后一天

[英]Get first day of week and last day in objective-c

我想获得本周的第一天,每个人都具有特定的语言环境。 例如,在美国,星期从星期日开始,而星期一在其他国家/地区开始。

我想每个人从星期一开始,这是因为我想将它用于SQLQuery。

我有这个:

NSDate *weekDay = [NSDate date]; //any date in the week in which to calculate the first or last weekday   
 NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:weekDay];
[components setDay:([components day]-([components weekday]-[[NSCalendar currentCalendar] firstWeekday]))];

NSDate *firstWeekday = [gregorian dateFromComponents:components];
NSDate *lastWeekday = [[gregorian dateFromComponents:components] dateByAddingTimeInterval:7 * 24 * 3600 - 1];
NSLog(@"first - %@ \nlast - %@", firstWeekday, lastWeekday);

如果在您的语言环境中,一周从星期一开始,但是如果从星期日开始,则不返回我想要的东西,那效果很好。

因此,想象今天是2015年10月11日,星期天的语言环境将返回第11周的第一天,最后一天,17星期一星期一的语言环境将返回第5周的第一天,最后一天11

我想在执行我的应用程序的任何地方返回第二个选项。

谢谢。 最好的祝福。

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

cal.firstWeekday = 2;// set first week day to Monday
// 1: Sunday, 2: Monday, ..., 7:Saturday

NSDate *now = [NSDate date];
NSDate *startOfTheWeek;
NSDate *endOfWeek;
NSTimeInterval interval;
[cal rangeOfUnit:NSCalendarUnitWeekOfYear
       startDate:&startOfTheWeek
        interval:&interval
         forDate:now];
//startOfTheWeek holds the beginning of the week

endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval - 1];
// endOfWeek now holds the last second of the last week day

[cal rangeOfUnit:NSCalendarUnitDay
       startDate:&endOfWeek
        interval:NULL
         forDate:endOfWeek];
// endOfWeek now holds the beginning of the last week day

测试:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterShortStyle;

NSLog(@"start: %@", [formatter stringFromDate:startOfTheWeek]);
NSLog(@"end:   %@", [formatter stringFromDate:endOfWeek]);

版画

start: 12.10.15, 00:00
end:   18.10.15, 00:00

所以星期一是一周的开始

如果我设置

cal.firstWeekday = 1;

它将打印

start: 11.10.15, 00:00
end:   17.10.15, 00:00

星期日是一周的第一天

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM