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

ios - 将持续数天的 NSDate 拆分为几个跨度

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

我有 2 个定义跨度的 NSDates,可以这样设置它们

spanA: 12:00 today
spanB: 12:00 tomorrow

这等于 24 小时,但我需要创建两个范围而不是一个,这样跨度就不会延伸到午夜。上面示例的结果如下所示:

spanA: 12:00 today
spanB: 23:59 today

spanC: 00:01 tomorrow
spanD: 12:00 tomorrow

我不知道该怎么做。我想出了一个使用这样的函数的想法:

- (NSInteger)daysBetweenDateNSDate *)fromDateTime andDateNSDate *)toDateTime
{
NSDate *fromDate;
NSDate *toDate;

NSCalendar *calendar = [NSCalendar currentCalendar];

[calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate
             interval:NULL forDate:fromDateTime];
[calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate
             interval:NULL forDate:toDateTime];

NSDateComponents *difference = [calendar components:NSCalendarUnitDay
                                           fromDate:fromDate toDate:toDate options:0];

return [difference day];
}

它返回跨度跨越的天数,或者换句话说:所需的跨度数。然后我可以例如循环循环天数并添加一些逻辑来创建必要的跨度。

我将其用作跨度的结构:

typedef struct
{
NSTimeInterval start;
NSTimeInterval end;
} span;

最好的方法是什么?



Best Answer-推荐答案


由于除了可能的第一个和最后一个跨度之外的所有跨度都是相同的全天跨度,您可以使用此算法:

  • 检查初始时间是否为午夜。如果不是午夜,则添加从当天开始到午夜的开盘跨度
  • 对于第一个午夜之后的每一天,将一整天的范围添加到第二天的午夜
  • 检查最后一次是否是午夜。如果不是午夜,则在结果中添加一个结束跨度。

关于ios - 将持续数天的 NSDate 拆分为几个跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29318764/

回复

使用道具 举报

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

本版积分规则

关注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