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

1万+

被折叠的 条评论
为什么被折叠?



