【问题标题】:Find if current time is between a range查找当前时间是否在范围之间
【发布时间】:2011-08-04 17:03:40
【问题描述】:

如果日期在某个范围之间,我可以找到如何获取,但我似乎不知道如何在特定时间创建日期。

查看 [NSDate 日期] 是否在时间范围之间的最简单方法是什么?

我想显示如下个性化的问候语:

12 pm - 4:59:9999 pm @“下午好,foo”
下午 5 点 - 晚上 11:59:9999 @“晚上好,伙计”
上午 12 点 - 上午 11:59:9999 @“早上好,伙计”

【问题讨论】:

    标签: iphone objective-c ios nsdate


    【解决方案1】:

    是的,您可以使用NSDateComponents,它将以 24 小时格式返回小时。

    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit fromDate:[NSDate date]];
    NSInteger hour = [components hour];
    
    if(hour >= 0 && hour < 12)
        NSLog(@"Good morning, foo");
    else if(hour >= 12 && hour < 17)
        NSLog(@"Good afternoon, foo");
    else if(hour >= 17)
        NSLog(@"Good evening, foo");
    

    斯威夫特 3

    let hour = Calendar.current.component(.hour, from: Date())
    
    if hour >= 0 && hour < 12 {
        print("Good Morning")
    } else if hour >= 12 && hour < 17 {
        print("Good Afternoon")
    } else if hour >= 17 {
        print("Good Evening")
    }
    

    【讨论】:

    • 不幸的是,我今天没有票了。不错的答案。
    • 从 iOS8 开始,您需要使用 NSCalendarUnitHour 但很好的答案。
    【解决方案2】:

    为 Swift 3.0 更新

    let hour = Calendar.current.component(.hour, from: Date())
    
    if hour >= 0 && hour < 12 {
        print("Good Morning")
    } else if hour >= 12 && hour < 17 {
        print("Good Afternoon")
    } else if hour >= 17 {
        print("Good Evening")
    }
    

    【讨论】:

      【解决方案3】:

      使用NSCalendar 实例从NSDate 中创建NSDateComponents 实例,然后只需检查NSDateComponents 的小时、分钟和秒属性并显示相应的消息。

      【讨论】:

        【解决方案4】:

        中午12:00 PM下午是从12:01 PM5:00 PM左右。 晚上是从 5:01 PM8 PM,或在日落前后。 夜晚是从日落到日出,所以从 8:01 PM 到 5:59 AM。

        NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitHour fromDate:[NSDate date]];
        [components setTimeZone:[NSTimeZone localTimeZone]];
        NSInteger hour = [components hour];
        
        if(hour >= 6 && hour < 12)
            NSLog(@"Good morning!");
        else if(hour >= 12 && hour < 17)
            NSLog(@"Good afternoon!");
        else if(hour >= 17 && hour < 20)
            NSLog(@"Good evening!");
        else if((hour >= 20) || (hour >= 0 && hour < 6))
            NSLog(@"Good night!");
        

        【讨论】:

          【解决方案5】:

          您可以使用 NSDate 类来获取 iPhone 上的时间。

          NSDate * today = [NSDate date];
          NSCalendar * cal = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
          
          NSDateComponents * comps = [cal components:NSHourCalendarUnit fromDate:today];
          
          if ( [comps hour]>0 && [comps hour] < 12 )
              NSLog(@"Good morning, foo");
          
          if ( [comps hour] > 12 && [comps hour] < 17 )
              NSLog(@"Good afternoon, foo");
          
          if ( [comps hour] >17 && [comps hour]<24  )
              NSLog(@"Good evening, foo");
          

          参考:NSDate Documentation

          【讨论】:

          • 那么在 12:00 pm 和 12:59.9999 pm 和 5 pm 和 5:59.9999 pm 之间会发生什么? :)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多