NSCalendar 日历
NSCalendar 日历
/**1. System Locale Information 取得当前用户的逻辑日历(logical calendar) 两种类方法**/// 1.1 取得当前用户的逻辑日历// currentCalendar取得的值会一直保持在cache中,第一次取得以后如果用户修改该系统日历设定,这个值也不会改变。NSCalendar *currentcalender = [NSCalendar currentCalendar];NSLog(@"currentcalender = %@",currentcalender.calendarIdentifier);// currentcalender = gregorian// 1.2 取得当前用户的逻辑日历// 用autoupdatingCurrentCalendar,那么每次取得的值都会是当前系统设置的日历的值。NSCalendar *calendar2 = [NSCalendar autoupdatingCurrentCalendar];NSLog(@"calendar2 = %@",calendar2.calendarIdentifier); // calendar2 = gregorian/** 2.Initializing a Calendar2.1 - (id)initWithCalendarIdentifier:(NSString *)identifier;初始化为各种日历。identifier的范围可以是:NSGregorianCalendar 阳历NSBuddhistCalendar 佛历NSChineseCalendar 中国日历NSHebrewCalendar 希伯来日历NSIslamicCalendar 伊斯兰日历NSIslamicCivilCalendar 伊斯兰民事日历NSJapaneseCalendar 日本日历*/NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];NSCalendar *calendar3 = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierJapanese];NSLog(@"calendar3 = %@",calendar3.calendarIdentifier); // calendar3 = japaneseNSCalendar *calendar4 = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];NSLog(@"calendar4 = %@",calendar4.calendarIdentifier); // calendar4 = chinese/*2.2 - (void)setFirstWeekday:(NSUInteger)value;设定每周的第一天从星期几开始,比如:. 如需设定从星期日开始,则value传入1. 如需设定从星期一开始,则value传入2. 以此类推详细信息请参阅FirstWeekday属性*/[calendar setFirstWeekday:2];/*2.3 - (void)setLocale:(NSLocale *)locale; 设置区域*/[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];/*2.4 - (void)setMinimumDaysInFirstWeek:(NSUInteger)mdw *///设定作为(每年及每月)第一周必须包含的最少天数,比如:. 如需设定第一周最少包括7天,则value传入7[calendar setMinimumDaysInFirstWeek:7];/*2.5 - (void)setTimeZone:(NSTimeZone *)tz *///设置时区[calendar setTimeZone:[NSTimeZone defaultTimeZone]];/**3. Getting Information About a Calendar*//*3.1 - (NSString *)calendarIdentifier 返回日历标示符 */NSString *canlendarIdentifier = calendar.calendarIdentifier;NSLog(@"canlendarIdentifier = %@",canlendarIdentifier); //canlendarIdentifier = gregorian/*3.2 - (NSUInteger)firstWeekday 返回日历指定的每周的第一天从星期几开始。缺省为星期天,即firstWeekday = 1*/NSUInteger firstWeekday = [calendar firstWeekday];NSLog(@"firstWeekday = %d",firstWeekday); // firstWeekday = 2/*3.3 - (NSLocale *)locale 返回日历指定的地区信息*/NSLocale *locale = [calendar locale];NSLog(@"localeIdentifier = %@",locale.localeIdentifier); // localeIdentifier = en_US/*3.4 //- (NSRange)maximumRangeOfUnit:(NSCalendarUnit)unit //返回单元的最大范围//- (NSRange)minimumRangeOfUnit:(NSCalendarUnit)unit //返回单元的最小范围 //比如Day Calendar Unit就是一个月最多31天这个意思Calendar UnitsSpecify calendrical units such as day and month.enum {NSEraCalendarUnit = kCFCalendarUnitEra,NSYearCalendarUnit = kCFCalendarUnitYear,NSMonthCalendarUnit = kCFCalendarUnitMonth,NSDayCalendarUnit = kCFCalendarUnitDay,NSHourCalendarUnit = kCFCalendarUnitHour,NSMinuteCalendarUnit = kCFCalendarUnitMinute,NSSecondCalendarUnit = kCFCalendarUnitSecond,NSWeekCalendarUnit = kCFCalendarUnitWeek,NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal,NSQuarterCalendarUnit = kCFCalendarUnitQuarter,NSWeekOfMonthCalendarUnit = kCFCalendarUnitWeekOfMonth,NSWeekOfYearCalendarUnit = kCFCalendarUnitWeekOfYear,NSYearForWeekOfYearCalendarUnit = kCFCalendarUnitYearForWeekOfYearNSCalendarCalendarUnit = (1 << 20),NSTimeZoneCalendarUnit = (1 << 21),};typedef NSUInteger NSCalendarUnit;*/// 月Day的最大范围NSRange maxRangeDay = [calendar maximumRangeOfUnit:NSCalendarUnitDay];NSLog(@"maxRangeDay = %@",NSStringFromRange(maxRangeDay)); // maxRangeDay = {1, 31}// 月Day的最小范围NSRange minRangeDay = [calendar minimumRangeOfUnit:NSCalendarUnitDay];NSLog(@"minRangeDay = %@",NSStringFromRange(minRangeDay)); // minRangeDay = {1, 28}// 每年的月的最大范围NSRange maxRangeMonth = [calendar maximumRangeOfUnit:NSCalendarUnitMonth];NSLog(@"maxRangeMonth = %@",NSStringFromRange(maxRangeMonth)); // maxRangeMonth = {1, 12}// 每个月周的最小范围NSRange minRangeWeekOfMonth = [calendar minimumRangeOfUnit:NSCalendarUnitWeekOfMonth];NSLog(@"minRangeWeekOfMonth = %@",NSStringFromRange(minRangeWeekOfMonth)); //minRangeWeekOfMonth = {1, 4}/* 3.5 - (NSUInteger)minimumDaysInFirstWeek 返回日历指定的第一周必须包含的最少天数。*/NSUInteger minimumDays = [calendar minimumDaysInFirstWeek];NSLog(@"minimumDays = %d",minimumDays); // minimumDays = 7/* 3.6 - (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date*///在一个给定的时间,小日历单元如(一天)在大日历单元(一周)中的序数。//比如forDate参数是星期一,而且firstWeekday 参数被设置为2(也就是星期一为一周的第一天),那么返回为1//通过这个函数可以判断 例如 :给定的日期是在一周的第几天,或一月的第几周。一年的第几个月。一年的第几天等//注:firstWeekday的设定会影响这个函数的返回值int ordinality = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitMonth forDate:[NSDate date]];NSLog(@"ordinality = %@",[NSString stringWithFormat:@"%d",ordinality ]); // ordinality = 1/*3.7 - (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date */// 一个小日历单元下。大日历单元的范围 例如 小日历单元是天。大日历单元是周。那么范围就是7天。就是1-7NSRange rangeUnit = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:[NSDate date]];NSLog(@"rangeUnit = %@",NSStringFromRange(rangeUnit)); // rangeUnit = {1, 31}/*3.8 - (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)datep interval:(NSTimeInterval *)tip forDate:(NSDate *)date //用于返回日期date(参数)所在的那个日历单元unit(参数)的开始时间(sDate)。//其中参数unit指定了日历单元,参数sDate用于返回日历单元的第一天,参数unitSecs用于返回日历单元的长度(以秒为单位),参数date指定了一个特定的日期。//如果startDate和interval均为可计算的,那么函数返回YES否则返回NO.*/NSDate *dateOut = [NSDate date];NSDateComponents *dc = [[NSDateComponents alloc] init];dc.year = 2014;dc.month = 10;dc.day = 1;NSDate *dateCalendar = [currentcalender dateFromComponents:dc];NSTimeInterval startTime;NSTimeInterval *startTimeInt = &startTime;if ([calendar rangeOfUnit:NSCalendarUnitDay startDate:&dateOut interval:startTimeInt forDate:dateCalendar]) {NSLog(@"%@",[dateOut description]); // 2014-09-30 16:00:00 +0000NSLog(@"%f",*startTimeInt); // 86400.000000}else{NSLog(@"Can not be calculated!");}//3.9 - (NSTimeZone *)timeZone//返回日历指定的时区信息。NSTimeZone *timeZone = [calendar timeZone];NSLog(@"timeZone = %@",timeZone.abbreviation); // timeZone = GMT+8/** 4 Calendrical Calculations 日历计算*///4.1 - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date// NSDateComponents 返回时间组件unsigned unitFlags = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;NSDate *date = [NSDate date];NSDateComponents *components = [calendar components:unitFlags fromDate:date];int year = components.year;int month = components.month;int day = components.day;int hour = components.hour;int minute = components.minute;int second = components.second;NSLog(@"%d,%d,%d,%d,%d,%d",year,month,day,hour,minute,second); // 2014,12,7,17,51,32//4.2 - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts//返回时间组件 比较2个日期的时间差值NSDate *startDate = date;NSDate *endDate = [[NSDate alloc] initWithTimeIntervalSinceNow:86400*2 ];unsigned int unitFlags2 = NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitDay;NSDateComponents *comps2 = [calendar components:unitFlags2 fromDate:startDate toDate:endDate options:0];int years = [comps2 year];int months = [comps2 month];int days = [comps2 day];NSLog(@"years = %d ,months = %d days = %d",years,months,days); // years = 0 ,months = 0 days = 2//输出: years = 0 ,months = 0 days = 2// 4.3 - (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts// 追加日期 并返回一个新日期NSDate *currentDate = [NSDate date];NSDateComponents *comps3 = [[NSDateComponents alloc] init];[comps3 setMonth:2];[comps3 setDay:3];NSDate *newDate = [calendar dateByAddingComponents:comps3 toDate:currentDate options:0];NSLog(@"newDate = %@",newDate); // newDate = 2015-02-10 09:51:32// 4.4 - (NSDate *)dateFromComponents:(NSDateComponents *)comps//创建日期NSDateComponents *comps = [[NSDateComponents alloc] init];[comps setYear:2014];[comps setMonth:10];[comps setDay:1];[comps setHour:12];[comps setMinute:0];[comps setSecond:0];NSDate *createdate = [calendar dateFromComponents:comps];NSLog(@"createdate = %@",createdate); // createdate = 2014-10-01 04:00:00 +0000
NSCalendar 日历相关推荐
- iOS - OC NSCalendar 日历iOS - OC NSCalendar 日历
本文目录 前言 1.日历的创建 2.日历的设置 3.日历设置信息的获取 4.日历信息的获取 回到顶部 前言 @interface NSCalendar : NSObject <NSCopying ...
- iOS - OC NSCalendar 日历
前言 @interface NSCalendar : NSObject <NSCopying, NSSecureCoding> NSCalendar 对世界上现存的常用的历法进行了封装,既 ...
- 关于NSCalendar 日历的学习记录
系统中定义的日历有: NSString * const NSGregorianCalendar; 公历(常用) NSString * const NSBuddhistCalendar; 佛教日历 NS ...
- iOS - Swift NSCalendar 日历
前言 public class NSCalendar : NSObject, NSCopying, NSSecureCoding NSCalendar 对世界上现存的常用的历法进行了封装,既提供了不同 ...
- NSCalendar 日历类
Cocoa中对日期和时间的处理 NSCalendar (一) NSCalendar用于处理时间相关问题.比如比较时间前后.计算日期所的周别等. 1. 创建或初始化可用以下方法 + (id)curren ...
- ios 计算两个时间相差秒数_Ios中时间差的计算,NSData与NSCalendar(日历)对象
时间差的计算: 计算过去时间与当前时间的时间差 注意:其中的NSDateFormatter时间格式化类初始化非常消耗性能,如果多次使用,建议定义为全局. NSString *timeStr = @&q ...
- 日历,日期类(copy)
NSDate *date=[NSDate date];//格林尼治时间NSLog(@"%@",date);NSCalendar *calendar=[NSCalendar curr ...
- objective-c calendar 日历(2)
主要有以下类: NSDate -- 表示一个绝对的时间点 NSTimeZone -- 时区信息 NSLocale -- 本地化信息 NSDateComponents -- 一个封装了具体年月日.时秒分 ...
- 日期 日历的一些常用类和方法
http://www.cnblogs.com/wayne23/archive/2013/03/25/2981009.html http://zcw-java.iteye.com/blog/189994 ...
- NSDateFormatter and NSDateComponents
NSDateFormatter调整时间格式的代码 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理. 例如: //实例化一个NSD ...
最新文章
- JSON——Jackson 时间格式化输入输出
- springboot配置文件加载位置
- 解决 wcf HTTP 无法注册 另一应用程序正在使用 TCP 端口 80
- Windows server 2003 R2 文件服務管理測試報告
- 1.1.4 错题知识整理(机器语言、汇编语言、正则语言、解释程序、编译、汇编)
- 什么是区块链?什么是比特币?一文轻松看懂!
- SharePoint 2013 - System Features
- 高等数学上-赵立军-北京大学出版社-题解-练习6.1
- 如何在linux当中,大量的添加用户
- mybatis 报错 with invalid types () or values 0. Cause: java.lang.NoSuchMethodException:
- iOS的GIF动画效果实现
- c# 委托和委托事件
- 编译ffmpeg:no match insn: lbu $r16,0($r5)
- 查找两个表中主键一样但其它字段数值不一样的记录
- Sigar使用详解(免费)
- 学美容化妆培训学校到哪里最好
- 警告: Establishing SSL connection without server
- 基于 jquery ui 扩展Widget
- 微信翻译,快把上海老外搞疯了
- mac os linux pageup pagedown,[整理]Mac中的类似于Windows中的PageUp和PageDown以及Ctrl+Home和Ctrl+End...
热门文章
- Linux中Centos7目录和文件管理
- 如何解决IDEA或PyCharm 莫名出现的黑色斑块,或者说文字下方出现随鼠标移动的黑色底色
- SQL Server 中WITH (NOLOCK)浅析(大自然的搬运工)
- mongodb arm linux,linux – 在ARM上构建mongo shell 3.2.x(armv7l / arm64 / aarch64) – 分段错误...
- 阿里云虚拟机外网访问yarn 8088 hdfs 50070
- YOLOv8之C2f模块——与YOLOv5的C3模块对比
- 第二类增值电信业务没有办理业务许可证开展经营活动合法嘛?
- VUE+OpenLayer动态显示船舶位置信息
- winform窗体运行时的大小和设计时不一致
- 在Android Studio上导入别人的项目后报错提示:......drawable-hdpi\xxx.9.png: AAPT: error: file failed to compile.