我想从周数和年份获取日期。我从服务器获得了周数和年份。我是
尝试以下代码,但它不起作用。
NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
// this is imporant - we set our input date format to match our input string
// if format doesn't match you'll get nil from your string, so be careful
[dateFormatter2 setDateFormat:@"yyyy-MM-dd"];
NSDate *now = [dateFormatter2 dateFromString:@"2001-01-01"];
NSCalendar *gregorian1 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps1 = [gregorian1 components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:now];
[comps1 setYear:2013];
[comps1 setWeek:51];
[comps1 setWeekday:2];
NSDate *resultDate = [gregorian1 dateFromComponents:comps1];
输出为:- 2012-12-31 18:30:00 +0000
我究竟做错了什么 ?提前致谢..
您的问题是 NSDateComponents 对象中的组件不明确,因为您是从现有 NSDate 创建的组件。在代码中放置一个断点并查看comps1
:
(lldb) po comps1
$0 = 0x0ab354f0 <NSDateComponents: 0xab354f0>
Calendar Year: 2013
Month: 1
Leap month: no
Day: 1
Week (obsolescent): 51
Weekday: 2
同时创建第 51 周的星期一(即 1 月 1 日)的日期有点困难。
当您想使用 NSDateComponents 创建 NSDate 时,您应该从“新鲜”组件开始。像这样:
NSCalendar *gregorian1 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps1 = [[NSDateComponents alloc] init];
[comps1 setYear:2013];
[comps1 setWeek:51];
[comps1 setWeekday:2];
NSDate *resultDate = [gregorian1 dateFromComponents:comps1];
结果:2013-12-16(希望是您所期望的)
分配初始化组件的代码具有以下组件:
(lldb) po comps1
$0 = 0x0a37d220 <NSDateComponents: 0xa37d220>
Calendar Year: 2013
Leap month: no
Week (obsolescent): 51
Weekday: 2
没有歧义。
此外,更换是一个好主意[comps1 setWeek:51];
with [comps1 setWeekOfYear:51];
但您的主要问题是重用现有的 NSDateComponents 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)