dateFromComponents 返回错误值

Posted

技术标签:

【中文标题】dateFromComponents 返回错误值【英文标题】:dateFromComponents returning wrong value 【发布时间】:2015-05-25 18:09:35 【问题描述】:

我正在尝试设置 [NSDate date] 的月份和年份,但函数 dateFromComponents 返回错误的值,这是我的代码:

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian]; // Setup an NSCalendar
NSDateComponents *components = [gregorianCalendar components: NSUIntegerMax fromDate: [NSDate date]]; // Setup NSDateComponents
[components setTimeZone:[NSTimeZone defaultTimeZone]];
[components setMonth:monthInt];
[components setYear:yearInt];

// Setup the new date
NSDate *dateToCompare = [gregorianCalendar dateFromComponents: components];

yearInt 是 2014 年,monthInt 是 12,但它报告的是 12-2015 而不是 2014 年,这是为什么呢?

谢谢!

【问题讨论】:

【参考方案1】:

你只需要输入你需要的位操作符,试试这个:

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian]; // Setup an NSCalendar
NSDateComponents *components = [gregorianCalendar components: NSCalendarUnitDay | NSCalendarUnitMonth |  NSCalendarUnitYear |NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour | NSCalendarUnitTimeZone fromDate: [NSDate date]]; // Setup NSDateComponents
[components setTimeZone:[NSTimeZone defaultTimeZone]];
[components setMonth:12];
[components setYear:2014];

// Setup the new date
NSDate *dateToCompare = [gregorianCalendar dateFromComponents: components];

NSLog(@"Ver %@",dateToCompare);

NSUIntegerMax = 18446744073709551615 以位表示:100000000000000000000000000000000000000000000000000000000000000000 很多人都关掉了。

【讨论】:

以上是关于dateFromComponents 返回错误值的主要内容,如果未能解决你的问题,请参考以下文章

dateFromComponents 默认为上午 8:00 [重复]

如何获取程序返回值,退出码,错误码

通过c中的函数从文件中读取整数返回错误值

C 错误处理

25.错误处理

lambda 如何在 MSVC2017 15.9.3 中使用 /std:c++17 中的静态局部错误返回值?