• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - NSCalendar 的 dateBySettingUnit 方法返回不明显的结果

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:18:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

NSDateComponents 解决了我的问题,但我想了解为什么这种方法如此有效

NSDate *today = [NSDate date];
NSLog(@"today is: %@", today);

NSDate *dayChanged = [calendar dateBySettingUnitNSCalendarUnitDay)
                                           value:10
                                          ofDate:today
                                         options:0];
NSLog(@"dayChanged is: %@", dayChanged);

NSDate *monthChanged = [calendar dateBySettingUnitNSCalendarUnitMonth)
                                             value:5
                                            ofDate:today
                                           options:0];
NSLog(@"monthChanged is: %@", monthChanged);

结果是:

today is: 2016-09-30 06:40:36 +0000
dayChanged is: 2016-10-10 00:00:00 +0000
monthChanged is: 2017-05-01 00:00:00 +0000

为什么 dateBySettingUnit 增加下一个更大的单位?



Best Answer-推荐答案


根据观察,dateBySettingUnit does not return past date

因此,对于使用 dateBySettingUnit 对 future 日期的快速测试设置可以按预期工作,请参见以下代码:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *today = [NSDate date];
NSLog(@"today is: %@", today);

NSDate *dayChanged = [calendar dateBySettingUnitNSCalendarUnitDay)
                                           value:31
                                          ofDate:today
                                         options:NSCalendarWrapComponents];
NSLog(@"dayChanged is: %@", dayChanged);

NSDate *monthChanged = [calendar dateBySettingUnitNSCalendarUnitMonth)
                                             value:12
                                            ofDate:dayChanged
                                           options:NSCalendarWrapComponents];
NSLog(@"monthChanged is: %@", monthChanged);

日志:

2016-09-30 12:58:30.506 TestRegex[3785:72957] today is: 2016-09-30 07:58:30 +0000
2016-09-30 12:58:30.508 TestRegex[3785:72957] dayChanged is: 2016-09-30 19:00:00 +0000
2016-09-30 12:58:30.509 TestRegex[3785:72957] monthChanged is: 2016-11-30 19:00:00 +0000

您可以尝试实际计算偏移量的链接答案中提到的 NSCalendar 扩展,或者您可以使用 NSDateComponents 解决方案:

 NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:today];
[comps setCalendar:calendar];
[comps setDay:5];

希望有帮助!

关于ios - NSCalendar 的 dateBySettingUnit 方法返回不明显的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785430/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap