如何检查现在日期是否在9:00-18:00

时间:2013-02-22 08:09:44

标签: ios objective-c nsdate

当我的应用程序启动时,我想检查日期是否在9:00-18:00之间。

我现在可以使用NSDate获得时间。我该如何查看时间?

2 个答案:

答案 0 :(得分:19)

这么多答案和很多缺陷......

您可以使用NSDateFormatter从日期中获取用户友好的字符串。 但是使用该字符串进行日期比较是一个非常坏主意!
请忽略任何涉及使用字符串的问题的答案......

如果您想获得有关日期年,月,日,小时,分钟等的信息,请使用NSCalendarNSDateComponents

为了检查日期是否在9:00到18:00之间,您可以执行以下操作:

NSDate *date = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date];

if (dateComponents.hour >= 9 && dateComponents.hour < 18) {
    NSLog(@"Date is between 9:00 and 18:00.");
}

修改
哎呀,使用dateComponents.hour <= 18将导致18:01等日期的错误结果。 dateComponents.hour < 18是要走的路。 ;)

答案 1 :(得分:6)

构建今天09:00和18:00的日期,并将当前时间与这些日期进行比较:

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];

[components setHour:9];
[components setMinute:0];
[components setSecond:0];
NSDate *nineHundred = [cal dateFromComponents:components];

[components setHour:18];
NSDate *eighteenHundred = [cal dateFromComponents:components];

if ([nineHundred compare:now] != NSOrderedDescending &&
    [eighteenHundred compare:now] != NSOrderedAscending)
{
    NSLog(@"Date is between 09:00 and 18:00");
}