目标C - 从今天(明天)开始第二天

时间:2012-10-01 22:25:11

标签: iphone objective-c ios cocos2d-iphone

如何查看日期本身是否明天?

我不想在今天这样的日期添加小时或任何内容,因为如果今天已经是22:59,那么添加太多会延续到第二天,如果时间增加则增加太少{ {1}}明天会错过。

我如何检查两个12:00并确保一个明天相当于另一个?

3 个答案:

答案 0 :(得分:51)

使用NSDateComponents,您可以从代表今天的日期中提取日/月/年组件,忽略小时/分钟/秒组件,添加一天,并重建与明天相对应的日期。

因此想象一下,您想要在当前日期添加一天(包括将小时/分钟/秒信息保持与“现在”日期相同),您可以将24 * 60 * 60秒的timeInterval添加到“now” “使用dateWithTimeIntervalSinceNow,但使用NSDateComponents以这种方式更好(以及防止DST等):

NSDateComponents* deltaComps = [[[NSDateComponents alloc] init] autorelease];
[deltaComps setDay:1];
NSDate* tomorrow = [[NSCalendar currentCalendar] dateByAddingComponents:deltaComps toDate:[NSDate date] options:0];

如果你想生成明天午夜对应的日期,你可以只检索现在代表的日期的月/日/年组件,没有小时/分钟/秒部分,并添加1天,然后重建日期:

// Decompose the date corresponding to "now" into Year+Month+Day components
NSUInteger units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:units fromDate:[NSDate date]];
// Add one day
comps.day = comps.day + 1; // no worries: even if it is the end of the month it will wrap to the next month, see doc
// Recompose a new date, without any time information (so this will be at midnight)
NSDate *tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps];

P.S。:您可以在Date and Time Programming Guide中阅读有关日期概念的非常有用的建议和内容,尤其是here about date components

答案 1 :(得分:6)

在iOS 8中,NSCalendar上有一种名为isDateInTomorrow的便捷方法。

目标-C

NSDate *date;
BOOL isTomorrow = [[NSCalendar currentCalendar] isDateInTomorrow:date];

Swift 3

let date: Date
let isTomorrow = Calendar.current.isDateInTomorrow(date)

Swift 2

let date: NSDate
let isTomorrow = NSCalendar.currentCalendar().isDateInTomorrow(date)

答案 2 :(得分:0)

您也许可以利用NSCalendar / Calendar来创造明天:

extension Calendar {
    var tomorrow: Date? {
        return date(byAdding: .day, value: 1, to: startOfDay(for: Date()))
    }
}