ios-如何查询一个月中特定的一天?

问题描述

如何查询一个月中特定的一天?

研究了很久NSDateNSDateFormatterNSCalendar,不知道怎么实现找出一月个中指定一天的功能。比如查询十二月第二个星期一的日期是多少,不知道怎么实现呢?

谢谢指教。

解决方案

谢谢回答者的答案,我根据得到的回答,实现了。最后这样的

    -(void)findWeekDay:(NSInteger)weekDay forWeek:(NSInteger)week OfMonth:(NSInteger)month OfYear:(NSInteger)year
{
        NSDateComponents *dateComp = [[NSDateComponents alloc]init];
[dateComp setYear:year];
[dateComp setMonth:month];
[dateComp setDay:1];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *firstDate=[gregorian dateFromComponents:dateComp];  //Sets first date of month.
firstDate=[self dateToGMT:firstDate];
NSLog(@"First date: %@",firstDate);
NSDateComponents *dateComp1 = [gregorian components:NSDayCalendarUnit|NSWeekdayCalendarUnit fromDate:firstDate];
NSInteger firstWeekDay=[dateComp1 weekday];  //Gets firstday of a week. 1-Sunday, 2-Monday and so on.
NSLog(@"First Week Day: %d",firstWeekDay);
NSRange daysInMonth = [gregorian rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:firstDate];   //To get number of days in that month
NSInteger x;    //days to be added to first date
if (firstWeekDay < weekDay) {
    x = (weekDay - firstWeekDay) + (7 * (week-1));
}
if (firstWeekDay > weekDay) {
    x = (7 - firstWeekDay + weekDay) + (7 * (week-1));
}
if (firstWeekDay == weekDay) {
    x = (7 * (week-1));
}
if (x > daysInMonth.length) {
    NSLog(@"Invalid Date: %d",x);
}
else {
    NSLog(@"Days to be added: %d",x);
    NSDateComponents *dateComp2 = [[NSDateComponents alloc]init];
    [dateComp2 setYear:0];
    [dateComp2 setMonth:0];
    [dateComp2 setDay:x];
    NSDate *desiredDate = [gregorian dateByAddingComponents:dateComp2 toDate:firstDate options:0];
    NSLog(@"Your desired date is: %@",desiredDate);
}
}

    - (NSDate *)dateToGMT:(NSDate *)sourceDate {
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:destinationGMTOffset sinceDate:sourceDate];
return destinationDate;
}

现在如果查询十二月的第三个星期一调用方法:

  [self findWeekDay:2 forWeek:3 OfMonth:12 OfYear:2012];

解决方案二:

// 设置月份中开始的时间
NSString *str = @"01 - 12 - 2012";
NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease];
[formatter1 setDateFormat:@"dd - MM - yyyy"];
NSDate *date = [formatter1 dateFromString:str];
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date];
NSInteger weekday = [weekdayComponents weekday];
int weekNumber = 2;
int dayOfweek = 2;
int x = (7 - weekday) * (weekNumber - 1) + dayOfweek;
// 添加第几个星期
if(x < 7)
{
    x += 7 * (weekNumber - 1) + 1;
}
else
{
    x += 7 * (weekNumber - 2) + 1;
}
时间: 2025-01-02 03:31:48

ios-如何查询一个月中特定的一天?的相关文章

使用do...while的方法输入一个月中所有的周日(实例代码)_javascript技巧

使用do...while的方法输入一个月中所有的周日(实例代码) do{ var date = Number(prompt('请输入一个月的总天数')); var start = (prompt('请输入一个月的一号是周几')); for(var i=0;i<date;i++){ if((start+1)%7===0){ console.log(i+'号是周日') } } console.log('查询完毕'); }while('yes'===prompt('您还继续查询休息日吗?','yes继

iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展

iOS开发封装一个可以响应超链接的label--基于RCLabel的交互扩展 一.引言         iOS系统是一个十分注重用户体验的系统,在iOS系统中,用户交互的方案也十分多,然而要在label中的某部分字体中添加交互行为确实不容易的,如果使用其他类似Button的控件来模拟,文字的排版又将是一个解决十分困难的问题.这个问题的由来是项目中的一个界面中有一些广告位标签,而这些广告位的标签却是嵌在文本中的,当用户点击文字标签的位置时,会跳转到响应的广告页.         CoreText框

xcode-大家好,我是ios开发的一个小白,问一下关于IOS相册选取图片后图片模糊的原因。

问题描述 大家好,我是ios开发的一个小白,问一下关于IOS相册选取图片后图片模糊的原因. #pragma mark - CGImagePickController NotificationCenter (void) CTAssetsPickCGImage:(NSNotification *)notice{NSArray *assetArr = [notice object];for (int x = 0; x < assetArr.count; x ++) { if (frameX <6)

android-在Android中查询一个数据库

问题描述 在Android中查询一个数据库 在/data/data/sankalp.jain.shre/databases/loginfinal.db中有一个表 login2.我使用adb sqlite3 正确的创立了数据库,来查询表格,但是使用rawQuery,似乎也没有添加数据,不能在命令行上获取. private SankalpDB dbhandle; //SankalpDB extends SQLiteOpenHelper private SQLiteDatabase sqdb; ...

java-如何获得一个月中的某一天?

问题描述 如何获得一个月中的某一天? 我想检索某一天是一个月中的哪一天.比如今天是2013-01-21.我想得到是一个月中具体的哪一天,比如今天是21号,就获得21.如何做这个功能呢? 解决方案 Calendar.getInstance().get(Calendar.DAY_OF_MONTH) 解决方案二: Calendar cal=Calendar.getInstance(); Date date=cal.getTime(); System.out.println(date.getDate()

链接传参数-客服端(ios)发送一个带参数的超链接,服务器端(asp.net)获取不到参数

问题描述 客服端(ios)发送一个带参数的超链接,服务器端(asp.net)获取不到参数 客服端(ios)发送一个超链接过来,asp.net网页端通过获取里面的参数来判断跳转的页面,可是每次获取的参数都为空,可以肯定的是链接后面的确有参数. 把链接复制出来单独在IE上浏览,也是同样的结果没有获取到参数.在本地通过VS又可以获取参数. 请高手们指点指点............

HTAP数据库 PostgreSQL 场景与性能测试之 15 - (OLTP) 物联网 - 查询一个时序区间的数据

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

ios 怎样判断一个时间是否在另一个时间段内

问题描述 ios 怎样判断一个时间是否在另一个时间段内 怎样判断一个时间是否在另一个时间段内,比如:判断12点是否在七点到九点之间? 解决方案 都转成NSTimeInterval,直接对比 解决方案二: NSDate提供了两个方法,一个earlier ,一个later,通过这两个当中的任何一个,进行两次比较就可以了

select-怎样用模糊查询查询一个换算完之后的数据

问题描述 怎样用模糊查询查询一个换算完之后的数据 select distinct grade from student where academyid ='academy.JSJ' and year = '2011' and grade like '%(2011%100)%' 就像是这样,但是最后的那个一直有问题,还有,escape这个办法我也试了,貌似没成功,求大神指点 解决方案 SQL模糊查询,一个关键字查询多个字段的方法 解决方案二: 帮帮忙..........