首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDate下午4时过

NSDate下午4时过
EN

Stack Overflow用户
提问于 2013-12-10 10:50:41
回答 2查看 102关注 0票数 0

你好,我在这个网站上看到了很多NSDate比较,但是它们看起来都很复杂,因为我只需要知道现在的日期是下午4点以后还是下午4点之前。

也许有什么简单的方法可以实现这个目标?

link

但它似乎很长很复杂,我只需要简单的回答下午4点以后。

代码语言:javascript
复制
- (BOOL)checkTime
{

    NSDate* now = [NSDate date];
    NSDate *endDate;
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    endDate = [formatter dateFromString:@"2012-12-07 16:00:00"];//well here I have a problem how do I set end day to today 4pm ?

    NSLog(@"%d",[now compare:endDate]);
    if([now compare:endDate] < 0)
         return YES;
    else if([now compare:endDate] > 0)
         return NO;
    else
         return NO;

}

编辑:在答案之后,我想出了下面的代码

代码语言:javascript
复制
- (BOOL)checkTime
{
    NSDate *date = [NSDate date];
    NSDateFormatter *df = [NSDateFormatter new];
    [df setDateFormat:@"HH"];
    int intS =9;
    NSInteger HourStart = intS;
    NSInteger hour = [[df stringFromDate:date] integerValue];
    int hourE = 16;
    NSInteger HourEnd = hourE;
    if((hour >HourStart) && (hour < HourEnd))
        return YES;
    else
        return NO;
}

目前,它运行良好,但我不确定它是否会在另一个日历集上工作等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 10:58:51

以下将给你一个小时:

代码语言:javascript
复制
NSDate *now = [NSDate date];

NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:@"hh"];

NSInteger hour = [[df stringFromDate:now] integerValue];

注意:

如果您只想检查4,那么使用hh,如果是16,那么使用HH

或者简单地说,HH的24小时格式。

票数 2
EN

Stack Overflow用户

发布于 2013-12-10 11:21:53

通常,我更喜欢使用NSDateComponentsNSCalendar来进行这类日历计算,因为您不知道用户使用的是什么日历。

下面是一种在NSDate上使用date组件在类别中进行比较的方法:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface NSDate (Foo)
- (BOOL)isAfterFourPM;
@end

@implementation NSDate (Foo)

- (BOOL)isAfterFourPM {
    unsigned int flags = NSHourCalendarUnit;
    NSDateComponents *comps = [[NSCalendar currentCalendar] components:flags fromDate:self];
    return (comps.hour >= 16);
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSDate *now = [NSDate date];
        NSLog(@"is after 4 PM? - %@",([now isAfterFourPM]?@"YES":@"NO"));

        //  let's try with a different time (17h)
        unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
        flags |= NSHourCalendarUnit;
        NSDateComponents *currentComps = [[NSCalendar currentCalendar] components:flags fromDate:now];
        currentComps.hour = 17;
        NSDate *afterFourDate = [[NSCalendar currentCalendar] dateFromComponents:currentComps];

        NSLog(@"is after 4 PM? - %@",([afterFourDate isAfterFourPM]?@"YES":@"NO"));
    }
}

这些指纹:

代码语言:javascript
复制
2013-12-10 05:16:05.921 Untitled 2[43453:507] is after 4 PM? - NO
2013-12-10 05:16:05.921 Untitled 2[43453:507] is after 4 PM? - YES

(中央时间上午5时)

在这种情况下,您所需要做的就是使用当前日历从日期获取NSHourCalendarUnit组件,并将NSDateComponents上的hour属性与16进行比较。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20492435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档