给定NSDate
,如何根据用户的区域设置找到该日期的第一天。例如,我听说有些国家将星期一视为一周的第一天,其他国家则使用星期日。我需要在第一种情况下返回前一个星期一,而在后一种情况下返回前一个星期日。
到目前为止,我的最大努力始终返回前一个星期日,无论应用何种设备设置:
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setLocale:[NSLocale currentLocale]];
NSDateComponents *components = [calendar components:NSYearForWeekOfYearCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:originalDate];
[components setWeekday:1];
NSDate *firstDayOfWeek = [calendar dateFromComponents:components];
奖金问题:在iOS上,哪个设置驱动了这个?它是'地区格式'吗?
答案 0 :(得分:5)
尝试更改:
[components setWeekday:1];
为:
[components setWeekday:[calendar firstWeekday]];
您还应该删除NSYearForWeekOfYearCalendarUnit
和NSWeekCalendarUnit
组件。
奖金问题:“地区格式”应该是更改一周中第一天的设置。
答案 1 :(得分:0)
对于那些不想首先设置日历的人来说,这是一种更为智能的旧方式。
NSDate *date = [NSDate dateWithTimeIntervalSince1970:1483620311.228];
NSLog(@"current date ===> : %@", date);
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *previousMonday = [calendar nextDateAfterDate:date
matchingUnit:NSCalendarUnitWeekday
value:2 //use 1-7 for Sunday to Saturday week day.
options:NSCalendarMatchNextTime | NSCalendarSearchBackwards];
NSLog(@"previousMonday date ===> : %@", previousMonday);