NSCalendar dateFromComponents返回奇怪的日期

时间:2018-01-05 13:34:35

标签: ios calendar

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

欢迎任何帮助

2 个答案:

答案 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];

对我来说,添加额外的组件会使我得到正确的年份。