NSCalendar dateFromComponents函数返回意外日期。 以下是用例:
NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
[calendar setTimeZone:timeZone];
时区为:当地时区(欧洲/巴黎(GMT + 1)偏移3600)
NSDateComponents *finalComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday fromDate:now];
[finalComponents setWeekday:weekDay];
此时,finalComponents
的值如下:
日历年:2018年
小时:23
分钟:59
一周中的一周:1
平日:2
[calendar dateFromComponents:finalComponents]
返回2018-12-31 22:59:00 +0000
,我希望2017-12-31 22:59:00 +0000
欢迎任何帮助
答案 0 :(得分:1)
愿这对你有帮助..!
注意:我将工作日的值用作1
(对于IST,它给出了正确的日期)。您可以根据您的时区进行更新。
NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
[calendar setTimeZone:NSTimeZone.localTimeZone];
NSDate *currentDate = [NSDate date];
NSDateComponents *finalComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday fromDate:currentDate];
[finalComponents setWeekday: 1];
[finalComponents setYearForWeekOfYear:finalComponents.year]; // Update year dynamically here
NSLog(@"Current Date: %@",currentDate);
NSLog(@"Print Date: %@",[calendar dateFromComponents:finalComponents]);
当前日期:Fri Jan 5 20:00:53 2018
打印日期:2017年12月31日20:00:00
问我,如果你需要任何进一步的帮助..!
答案 1 :(得分:0)
您提取的组件似乎不明确,导致一个奇怪的日期。如果您在所选组件中包含NSCalendarUnitYearForWeekOfYear
,则应获得正确的年份:
NSDateComponents *finalComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday | NSCalendarUnitYearForWeekOfYear fromDate:now];
对我来说,添加额外的组件会使我得到正确的年份。