ios正在使用NSDateComponents、NSDate、NSCalendar它的结论是在当前时间是在一段时间在一天。

一般应用程序设置这一组的存在,比如夜间模式,如果你。从8:00-23:00。在这个当前的时间是如何推断出期间。主要的困难在于如何使用NSDate生成8:00时间和23:00时间。然后用当前时间,也许有足够的时间,以使控制。

这里有两种思路:

法1.使用NSDate生成当前时间,然后转为字符串,从字符串中取出当前的年、月、日,然后再拼上时、分、秒,然后再将拼接后的字符串转为NSDate,最后用当前的时间跟自己生成的俩NSDate的时间点比較。(该方法比較笨,也不难。但看起来有点太菜了,看上去不怎么规范)

法2.用NSDateComponents、NSCalendar确定俩固定的NSDate格式的时间,然后再进行比較(此方法比較装逼,事实上跟拼字符串的方法复杂度差不了多少。但看起来比較规范,像是大神写的)。

/**
 * @brief 推断当前时间是否在fromHour和toHour之间。

如。fromHour=8,toHour=23时。即为推断当前时间是否在8:00-23:00之间
 */
- (BOOL)isBetweenFromHour:(NSInteger)fromHour toHour:(NSInteger)toHour
{
    NSDate *date8 = [self getCustomDateWithHour:8];
    NSDate *date23 = [self getCustomDateWithHour:23];

    NSDate *currentDate = [NSDate date];

    if ([currentDate compare:date8]==NSOrderedDescending && [currentDate compare:date23]==NSOrderedAscending)
    {
        NSLog(@"该时间在 %d:00-%d:00 之间!", fromHour, toHour);
        return YES;
    }
    return NO;
}

/**
 * @brief 生成当天的某个点(返回的是伦敦时间,可直接与当前时间[NSDate date]比較)
 * @param hour 如hour为“8”。就是上午8:00(本地时间)
 */
- (NSDate *)getCustomDateWithHour:(NSInteger)hour
{
    //获取当前时间
    NSDate *currentDate = [NSDate date];
    NSCalendar *currentCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *currentComps = [[NSDateComponents alloc] init];

    NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    currentComps = [currentCalendar components:unitFlags fromDate:currentDate];

    //设置当天的某个点
    NSDateComponents *resultComps = [[NSDateComponents alloc] init];
    [resultComps setYear:[currentComps year]];
    [resultComps setMonth:[currentComps month]];
    [resultComps setDay:[currentComps day]];
    [resultComps setHour:hour];

    NSCalendar *resultCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    return [resultCalendar dateFromComponents:resultComps];
}

PS:有一种更好的方式牛逼,随后不久,你说,加群:172158202
时间: 2024-11-06 21:39:35

ios正在使用NSDateComponents、NSDate、NSCalendar它的结论是在当前时间是在一段时间在一天。的相关文章

ios中利用NSDateComponents、NSDate、NSCalendar判断当前时间是否在一天的某个时间段内。

应用中设置一般会存在这样的设置,如夜间勿扰模式,从8:00-23:00,此时如何判断当前时间是否在该时间段内.难点主要在于如何用NSDate生成一个8:00的时间和23:00的时间,然后用当前的时间跟这俩时间作对比就好了. 下面提供两条思路: 法1.用NSDate生成当前时间,然后转为字符串,从字符串中取出当前的年.月.日,然后再拼上时.分.秒,然后再将拼接后的字符串转为NSDate,最后用当前的时间跟自己生成的俩NSDate的时间点比较.(该方法比较笨,也不难,但看起来有点太菜了,看上去不怎么

NSDate,NSCalendar,NSTimer,NSTimeZone

NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是不可改变的. 如果你要创建date对象并表示当前日期,你可以alloc一个NSDate对象并调用init初始化: C代码   NSDate *now = [[NSDate alloc] init]; 或者使用NSDate的date类方法来创建一个日期对象.如果你需要与当前日期不同的日期,你可以使用NSDate的 i

supersr--时间显示逻辑-->NSDate+NSCalendar

- (NSString *)created_at{ //    从后台返回的字符串格式:Mon Aug 03 09:17:31 +0800 2014, //NSDateFormatter可以把NSDate转成字符串,也可以把字符串转成NSDate //初始化一个时间格式化器 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; //指定时间格式化字符串-->是一个什么样的格式 formatter.dateFormat = @&quo

【IOS学习笔记】Swift iOS 日期操作:NSDate、NSDateFormatter(转载)

转载自:http://blog.csdn.net/jinnchang/article/details/44592801 1.日期(NSDate) [objc] view plaincopy // 1.初始化 // 初始化一个当前时刻对象 var now = NSDate() // 初始化一个明天当前时刻对象 var tomorrow = NSDate(timeIntervalSinceNow: 24*60*60) // 初始化一个昨天当前时刻对象 var yestoday = NSDate(ti

iOS开发-OC篇-NSDate

今天总结一下OC中NSDate的一些简单的用法,注意可不是NSData哦! NSDate的使用 1> NSDate初始化方法 //获取当前时间 NSDate * date = [NSDate date]; //返回以当前时间为基准,然后过了secs秒的时间 [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24]; //返回以lastDate为基准,然后过了secs秒的时间 [NSDate dateWithTimeInterval:60 * 60 *

搞了一段时间iOS开发的感受

接触iOS有了一小段的时间了,属于半路出家,之前只是对C和数据结构有一些了解并不深入,Objective-C算是第一门较为深入的了解吧,知道自己在各个方面都差的很远,需要学习的东西很多很多. 第一个阶段就是基础的学习,熟悉UIFoundation和UIKit的基础框架,能自己写些简单的app,花了几个月的时间.掌握了这部分的基础知识后,开始在公司做项目,开始看写app发现自己好多实现都无从下手,当然还有很多看不到的地方,于是就开始看一些code4app和github上的代码,先看example,

iOS SDK详解之NSCalendar & NSDate?Components

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢饮关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:NSCalendar 和 NSDate?Components是有关iOS 时间相关API很重要的两个类.最近刚好用到,这里就整理下. 概念 NSCalendar 顾名思义就是日历,封装了系统如何按照年月日的方式来组织时间,组织时间的方式和地区,时区有很大关

IOS,利用NSDateComponents,NSCalendar判断当前的时间点是否在某个时间段内的方法

1 - (BOOL)isBetweenFromHour:(NSInteger)fromHour toHour:(NSInteger)toHour 2 { 3 NSDate *date8 = [self getCustomDateWithHour:8]; 4 NSDate *date23 = [self getCustomDateWithHour:23]; 5 NSDate *currentDate = [NSDate date]; 6 7 if ([currentDate compare:dat

NSDate ,NSCalendar一些用法

NSDate *date = [NSDate date]; [date dateByAddingTimeInterval: ]//通过加减秒数来改变date的值这里一般需要用到日期格式器NSFormatter类 NSFormatter *formatter = [NSFormatter alloc]init];[formatter setDateStyle: ]//设置系统时间格式[formatter setDateFormat:];//自定义时间格式(格式要规范)G: 公元时代,例如AD公元y