时间与日期详解

这篇博客详细介绍了iOS中处理日期和时间的类,包括NSDate的初始化和时间戳获取,NSCalendar的初始化及计算月份天数,以及NSDateFormatter的常用格式化方法。还提到了封装时间日历类以提高开发效率。

时间日历类

导语

NSDate、 NSCalendar、 NSDateComponents和 NSTimeZone类,提供了日期和时间的编程和格式支持。

NSDate: 表示一个绝对的时间戳
NSTimeZone: 时区信息
NSCalendar: 日历类,可以计算大部分日期
NSDateFormatter: 用来在日期和字符串之间转换

一、NSDate

1. + (instancetype)init

//以下两行代码的作用是相同的,默认初始化,并返回当前时间
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [NSDate date];

//将打印出的时间格式:2015-10-26 20:20:10 +0000

2. - (NSTimeInterval)timeIntervalSince1970

//The interval between the date object and 
//  00:00:00 UTC on 1 January 1970. (read-only)
NSDate *now = [NSDate date];
NSLog(@"%f", [now timeIntervalSince1970]);

//返回当前时间到1970年1月1日00:00:00的秒数

3. 求当前时区的当前时间

由于NSDate *date = [NSDate date];语句产生的是一个GMT时间,并不是北京时间,所以在开发时就需要对这个date进行处理,操作如下

- (NSDate *)dateNow {
    //获取当前时区的当前时间
    NSDate *date = [NSDate date];
    NSTimeZone *zone = [NSTimeZone systemTimeZone];
    NSInteger interval = [zone secondsFromGMTForDate:date];
    NSDate *localeDate = [date dateByAddingTimeInterval:interval];
    return localeDate;
}

二、NSCalendar

NSCalendar类能够封装日历信息,调度多个时间段。该类含有多种日历的实现代码,其中包括公历、中国农历、日本历、伊斯兰历等等。

1. 初始化

//返回用户当前所选区域和语言环境所对应的日历
NSCalendar *calendar = [NSCalendar currentCalendar];

//创建一个公历
NSCalendar *gregorianCalendar = [[NSCalendar alloc] 
            initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

2. 利用NSCalendar的实例方法求某个月的天数

- (NSInteger)maxDayForYear:(NSInteger *)year month:(NSInteger)month {
    NSString *date = [NSString stringWithFormat:@"%04ld-%02ld-01", (long)year, month];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];

    NSDate *today = [formatter dateFromString:date];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSRange days = [calendar rangeOfUnit:NSCalendarUnitDay
                                  inUnit:NSCalendarUnitMonth
                                 forDate:today];

    return days.length;
    //小单位是day,大单位是month,如果today的值是2016-02-01,  
    //那么days的range则是1-29.
    //注意如果小单位是day,大单位是year,today的值是2016-02-01,  
    //那么days的范围不是1-366,而是1-31,这是day的取值范围,只可能到31了。
}

其中的- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate * _Nonnull)date很关键。
这个方法的用处是,根据参数提供的时间点,得到一个小的单位在一个大得单位里面的取值范围

三、NSDateFormatter

NSDateFormatter可以对输出的NSDate日期对象进行格式化

1. 最常用的格式化

    NSDate *date = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"YYYY-MM-dd HH:MM:ss"];

    return [formatter stringFromDate:date];
    //会按照2015-01-01 00:00:00这种格式输出
    //return类型是一个NSString *

四、常用的时间日历封装类

将常用的类封装在自己的类文件中,在下次开发时可以更方便地调用。

常用的时间日历封装类(开发时总结的)


参考资料:wayne23的博客

在计算机科学的研究数据管理实践中,自动化程序的应用价值日益显著。本文所述工具“关键词驱动的CCF等级论文自动采集系统”即为一例,其核心功能在于依据用户设定的检索词,自动收集、筛选并整合由中国计算机学会(CCF)认证的A、B、C三个等级的学术期刊及会议论文。此类自动化方案不仅显著提升了科研工作的效率,亦加速了学术资源的有效传播应用。CCF对期刊会议的分级体系,为学界提供了明确的参考框架:A级代表该学科内最具权威性影响力的顶尖出版物,B级C级则分别对应重要及具有一定认可度的学术平台。该系统的运作流程主要包括:接收用户输入的关键词,通过互联网进行定向检索,并借助网页解析、元数据提取或专用接口等方式,识别出同时符合关键词条件且属于CCF分级范围的论文条目。随后,程序将对获取的信息进行结构化处理,生成清晰易读的汇总报告,其中通常涵盖论文题目、作者、发表日期、所属期刊或会议名称等关键字段。技术层面,该工具的实现很可能基于网络爬虫数据抓取技术。网络爬虫能够自动化地遍历目标网站,模拟人工浏览行为;数据抓取则专注于从页面中提取特定内容。两者结合,可高效完成大规模、重复性的信息采集任务。在编程实现上,开发者多采用Python语言,并借助如Requests进行网络请求、BeautifulSoup或Scrapy进行页面解析、Pandas及NumPy进行数据处理等开源库。此外,为管理自动化任务的执行流程,可能集成Celery等任务队列系统。需要指出的是,尽管该工具具备高效便捷的优势,使用者必须严格遵守相关法律伦理规范。这包括尊重目标网站的服务协议、保护知识产权隐私权、避免对学术资源的过度索取或不当使用。同时,由于网络环境网站结构的动态变化,程序可能面临反爬虫策略、页面格式调整等运行障碍,因此需进行定期维护适应性更新。总体而言,本工具为科研人员提供了一种快速定位高价值学术资料的有效手段,能大幅节约文献调研的时间成本。然而,使用过程中应始终秉持负责任的态度,确保操作合法合规,并对潜在的技术挑战保持充分认识。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值