使用 NSDate 创建一个 6 小时的日期窗口

Posted

技术标签:

【中文标题】使用 NSDate 创建一个 6 小时的日期窗口【英文标题】:Using NSDate to create a 6 hour date window 【发布时间】:2014-09-18 06:14:00 【问题描述】:

我在一个数组中有一堆 NSDates。我需要生成一个函数,将每个日期变成一个数字(6 小时窗口),如下所示:

Sept 17, 2014 12:00am to 5:59am = 2014-09-17-1
Sept 17, 2014 6:00am to 12:00pm = 2014-09-17-2
Sept 17, 2014 12:01pm to 6:00pm = 2014-09-17-3
Sept 17, 2014 6:01pm to 12:00pm = 2014-09-17-4
Sept 17, 2018 12:00am to 5:59am = 2014-09-18-1

我想传递一个日期并取回第一部分的号码。对于第 2 部分,我想获取 2 次或 12 小时前的数字?

有什么想法吗?

【问题讨论】:

【参考方案1】:

您应该检查 NSCalendar 和 NSDateComponents。通常,您使用 NSCalendar 从您的 NSDate 创建 NSDateComponents。这会给你几小时、几天、几年、几个月、几秒的好整数。然后,您可以使用这些值对它们进行分组。

例如:

NSDate * someDate = [NSDate date];
NSCalendar * gregorian = [NSCalendar alloc] initWithCalendatIdentifier: NSGregorianCalenar];
NSDateComponenets * components = [gregorian components: NSDayCalendarUnit | NSHourCalendarUnit fromDate: someDate];

你可以使用dateComponents获取小时和天数,它上面的所有其他属性都是无效的。如果你想要更多,你还需要在组件的参数中指定这些单位:fromData;。

【讨论】:

以上是关于使用 NSDate 创建一个 6 小时的日期窗口的主要内容,如果未能解决你的问题,请参考以下文章

NSDate 现在距离我的 ios 模拟器 1 小时

将(日期+时间)从 NSString 转换为 NSDate 并添加一些小时

iOS:从 NSDate 获取本地化小时

NSDateComponents - 结合日期和时间会损失 1 小时?

NSdate(时区)中的问题日期时间显示过去 5 小时 30 分钟

如何在 Swift 中从 NSDate 获取日、月和小时