[英]How to know the given date is which month's which week?
我有一个要求,如果我给出具体日期,例如:
输入2016-02-01
,应返回2016-2-1
,表示2016-02-01
属于2016
年 2 月的第一周。
输入2016-09-01
,应返回2016-8-5
,表示2016-09-01
属于2016
年 8 月的第五周。
如果2016-01-01
不是星期一,则返回年份应为2015-xx
。
注意,那里的公式模式是从周一到周日是一个星期。 例如2016-04
, 2016-04-04
-> 2016-04-10
是四月的第一周。 2016-04-01
-> 2016-04-03
不属于四月的周,它属于三月。
我尝试使用NSCalendar,但要求很特殊,我不知道如何处理,所以,有人可以为此提供一些思路吗?
提前致谢。
我试过的代码:
在我的 Util.m 中:
+ (NSString *)getCustomMonthAndWeek:(NSString *)formatDateStr {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date= [[NSDate alloc] init];
date = [formatter dateFromString:formatDateStr];
NSCalendar *calen = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *dateCom = [calen components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
NSString *ret_str = @"";
ret_str = [[NSString alloc] initWithFormat:@"%ld-%ld-%@", (long)dateCom.year, (long)dateCom.month, dateCom.weekOfMonth];
return ret_str;
}
在我的 VC 中:
- (void)viewDidLoad {
[super viewDidLoad];
NSString *string = [Util getCustomMonthAndWeek:@"2016-04-02"]; // Here prints 2016-4-1, is not my requirement, you see my Attention.
NSLog(@"%@", string);
}
使用 NSCalendar 设置为 NSDateComponents 你会发现给定的日期是哪个月的,星期。 使用以下代码
NSDate *date=[NSDate date];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *dateComponents = [gregorianCalendar components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
组件给出输出日历年:2017 月:2 闰月:无日:7 小时:14 分钟:55 月中的一周:2
NSDate *someDate = // whatever
NSDate *now = [NSDate date];
NSDateComponents *thenComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:someDate];
NSDateComponents *nowComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:now];
if([thenComponents year] == [nowComponents year] && [thenComponents month] == [nowComponents month] && [thenComponents day] == [nowComponents day] && [thenComponents hour] == [nowComponents hour])
{}
如果您只想检查日期,请删除“小时”组件,或者同时删除该组件和“天”(并替换为 NSWeekCalendarUnit 和 -week 方法)以检查星期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.