Foundation框架-NSCalendar
NSCalendar
日历类
Cocoa中对日期和时间的处理 NSCalendar (一) (2008-11-12 21:54:10)
NSCalendar用于处理时间相关问题。比如比较时间前后、计算日期所的周别等。
1. 创建或初始化可用以下方法
+ (id)currentCalendar;
取得当前用户的逻辑日历(logical calendar)
+ (id)autoupdatingCurrentCalendar;
取得当前用户的逻辑日历(logical calendar), ......
- (id)initWithCalendarIdentifier:(NSString *)identifier;
初始化为各种日历。identifier的范围可以是:
NSGregorianCalendar 阳历
NSBuddhistCalendar 佛历
NSChineseCalendar 中国日历
NSHebrewCalendar 希伯来日历
NSIslamicCalendar 伊斯兰日历
NSIslamicCivilCalendar 伊斯兰民事日历
NSJapaneseCalendar 日本日历
2. 使用前若有必要可以先做以下设定
- (void)setLocale:(NSLocale *)locale;
设置区域
- (void)setTimeZone:(NSTimeZone *)tz;
设置时区
- (void)setFirstWeekday:(NSUInteger)value;
设定每周的第一天从星期几开始,比如:
. 如需设定从星期日开始,则value传入1
. 如需设定从星期一开始,则value传入2
. 以此类推
详细信息请参阅FirstWeekday属性
- (void)setMinimumDaysInFirstWeek:(NSUInteger)value;
设定作为(每年及每月)第一周必须包含的最少天数,比如:
. 如需设定第一周最少包括7天,则value传入7
详细信息请参阅MinimumDaysInFirstWeek属性
3. 取回设定信息用以下方法
- (NSString *)calendarIdentifier
返回日历标示符(identifier)。有效的日历标示符包括:
NSGregorianCalendar
NSBuddhistCalendar
NSChineseCalendar
NSHebrewCalendar
NSIslamicCalendar
NSIslamicCivilCalendar
NSJapaneseCalendar
- (NSLocale *)locale;
返回日历指定的地区信息。它将影响???
- (NSTimeZone *)timeZone;
返回日历指定的时区信息。它将影响???
- (NSUInteger)firstWeekday;
返回日历指定的每周的第一天从星期几开始。缺省为星期天,即firstWeekday = 1
当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]
的ordinalityOfUnit参数为NSWeekdayCalendarUnit,inUnit参数为NSWeekCalendarUnit时,
firstWeekday属性影响它的返回值。具体说明如下:
. 当firstWeekday被指定为星期天(即 = 1)时,它返回的值与星期几对应的数值保持一致。比如:
fromDate传入的参数是星期日,则函数返回1
fromDate传入的参数是星期一,则函数返回2
. 当firstWeekday被指定为其它值时(即 <> 1)时,假设firstWeekday被指定为星期一(即 = 2),那么:
fromDate传入的参数是星期一,则函数返回1
fromDate传入的参数是星期二,则函数返回2
fromDate传入的参数是星期日,则函数返回7
- (NSUInteger)minimumDaysInFirstWeek;
返回日历指定的第一周必须包含的最少天数。缺省为1,即minimumDaysInFirstWeek = 1。
当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]
的ordinalityOfUnit参数为NSWeekCalendarUnit,inUnit参数为NSYearCalendarUnit时,
minimumDaysInFirstWeek属性影响它的返回值。具体说明如下:
2005年1月
日 一 二 三 四 五 六
--------------------------------
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
2005年1月第一周包括1号。
a. 如果将minimumDaysInFirstWeek设定 = 1
则fromDate传入1月1号,方法均返回1 ==> 满足minimumDaysInFirstWeek指定的天数(最少1天),所以方法将其归为2005年的第1周
则fromDate传入1月2-8号,方法均返回2
则fromDate传入1月9-15号,方法均返回3
......
b. 如果将minimumDaysInFirstWeek设定为 > 1,比如2
则fromDate传入1月1号,方法均返回53 ==> 不足2天,所以方法将其归为2004年的第53周
则fromDate传入1月2-8号,方法均返回1
则fromDate传入1月9-15号,方法均返回2
......
2008年1月
日 一 二 三 四 五 六
---------------------------------
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
2005年1月第一周包括1-5号共5天。
a. 如果将minimumDaysInFirstWeek设定为 <= 5时
则fromDate传入1月1-5号,方法均返回1 ==> 满足minimumDaysInFirstWeek指定的天数,所以方法将其归为2008年的第1周
则fromDate传入1月6-12号,方法均返回2
则fromDate传入1月13-19号,方法均返回3
......
b. 如果将minimumDaysInFirstWeek设定为 > 5,比如6
则fromDate传入1月1-5号,方法均返回53 ==> 当周不足6天,所以方法将其归为2007年的第53周
则fromDate传入1月2-8号,方法均返回1
则fromDate传入1月9-15号,方法均返回2
......
当方法[NSCalendar ordinalityOfUnit: inUnit: fromDate:]
的ordinalityOfUnit参数为NSWeekCalendarUnit,inUnit参数为NSMonthCalendarUnit时,
minimumDaysInFirstWeek属性影响它的返回值。以2008年4月为例, 具体说明如下:
2008年4月
日 一 二 三 四 五 六
---------------------------------
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
2008年4月第一周包括1、2、3、4、5号。
1. 如果将minimumDaysInFirstWeek设定为小于或等于5的数
则fromDate传入4月1-5号,方法均返回1
则fromDate传入4月6-12号,方法均返回2
则fromDate传入4月13-19号,方法均返回3
....
2. 如果将minimumDaysInFirstWeek设定为大于5的数
则fromDate传入1-5号,方法均返回0
则fromDate传入6-12号,方法均返回1
则fromDate传入13-19号,方法均返回2
Cocoa中对日期和时间的处理 NSCalendar (二)
其他方法的说明
- (NSRange)maximumRangeOfUnit:(NSCalendarUnit)unit;
返回单元的最大范围。就Gregorian来说有:
NSEraCalendarUnit => 0 - 2
NSYearCalendarUnit => 1 - 10000
NSMonthCalendarUnit = 1 - 12
NSDayCalendarUnit = 1 - 31
NSHourCalendarUnit = 0 - 24
NSMinuteCalendarUnit = 0 - 60
NSSecondCalendarUnit = 0 - 60
NSWeekCalendarUnit = 1 - 53
NSWeekdayCalendarUnit = 1 - 7
NSWeekdayOrdinalCalendarUnit = ? (2147483647 - 2147483647)
(NSNotFound - NSNotFound)
- (NSRange)minimumRangeOfUnit:(NSCalendarUnit)unit;
返回单元的最小范围。就Gregorian来说有:
NSEraCalendarUnit => 0 - 2
NSYearCalendarUnit => 1 - 10000
NSMonthCalendarUnit = 1 - 12
NSDayCalendarUnit = 1 - 28 ***
NSHourCalendarUnit = 0 - 24
NSMinuteCalendarUnit = 0 - 60
NSSecondCalendarUnit = 0 - 60
NSWeekCalendarUnit = 1 - 52 ***
NSWeekdayCalendarUnit = 1 - 7
NSWeekdayOrdinalCalendarUnit = ? (2147483647 - 2147483647)
(NSNotFound - NSNotFound)
- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的顺序,比如:
. 要取得2008/11/12在当月的第几周则可以这样调用该方法:
[calendar ordinalityOfUnit:NSWeekOrdinalCalendarUnit inUnit: NSWeekCalendarUnit forDate: someDate];
注: someDate存放了2008/11/12
. 要取得1:50分在一天中处于第几个小时,则可以这样调用该方法:
[calendar ordinalityOfUnit:NSHourCalendarUnit inUnit: NSDayCalendarUnit forDate: someTime];
注: someTime存放了1:50
. 其它请参照firstWeekday和minimumDaysInFirstWeek中的说明
- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的范围,比如:
. 要取得2008/11/12在所在月份的日期范围则可以这样调用该方法:
[calendar ordinalityOfUnit:NSDayCalendarUnit inUnit: NSMonthCalendarUnit forDate:fDate];
则返回1-31。注: fDate存放了2008/11/12
. 要取得2008/02/20在所在月份的日期范围则可以这样调用该方法:
[calendar ordinalityOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:fDate];
则返回1-29。注: fDate存放了2008/11/12
- (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)sDate interval:(NSTimeInterval *)unitSecs forDate:(NSDate *)date;
用于返回日期date(参数)所在的那个日历单元unit(参数)的开始时间(sDate)。其中参数unit指定了日历单元,参数sDate用于返回日历单元的第一天,参数unitSecs用于返回日历单元的长度(以秒为单位),参数date指定了一个特定的日期。
如果startDate和interval均为可计算的,那么函数返回YES否则返回NO.比如:
. 要计算2008/01/08日所在的周的第一天:
...
NSDate *dateOut = [NSDate date];
NSDate **sDate = &dateOut;
NSDateComponents *dc = [[NSDateComponents alloc] init];
[dc setYear: 2008];
[dc setMonth: 1];
[dc setDay: 8];
NSDate *date = [calendar dateFromComponents:dc];
NSTimeInterval intOut;
NSTimeInterval *intervalOut = &intOut;
if ([calendar rangeOfUnit:NSMonthCalendarUnit startDate:sDate interval:interval0 forDate:date]){
NSLog(@"%@", [*sDate description]);
NSLog(@"%f", *intervalOut);
}
else{
NSLog(@"Can not be calculated!");
}
...
在控制台窗口上可以看到:
2008-01-06 00:00:00 +0800
604800.000000
注: 2008-01-06是2008/01/08所在周的第一天,604800是一周7天的秒数。
. 要计算2008/01/05日所在的周的第一天,在控制台窗口上可以看到:
2007-12-30 00:00:00 +0800
604800.000000
. 要计算2008/02/06日所在的月的第一天,在控制台窗口上可以看到:
2007-02-01 00:00:00 +0800
2505600.000000
注: 2505600是二月29天的秒数。
Foundation框架-NSCalendar的更多相关文章
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...
- iOS - OC Foundation 框架
前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...
- iOS - Swift Foundation 框架
前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...
- Objective-C Foundation框架
1.字符串 OC由两个字符串:NSString和NSMutableString,NSString代表字符序列不可变的字符串,而NSMutableString则代表字符序列可变的字符串. 1.1 创建字 ...
- OC 知识:Foundation 框架及相关类详尽总结
本文用来介绍Foundation框架的相关知识,以及Foundation框架所提供类的相关知识总结. 1. 框架介绍 框架是由很多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使开发程序变得更加 ...
- iOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...
- Foundation框架-NSString和NSMutableString
可变与不可变的字符串 --1-- Foundation框架介绍 1.1 框架介绍 --2-- NSString 2.1 NSString介绍及使用 2.2 NSString创建方式 2.3 从文件中 ...
- Core Foundation框架
转载自:http://blog.csdn.net/weiwangchao_/article/details/7744972 Core Foundation框架 (CoreFoundation.fram ...
- 08OC之Foundation框架
1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...
随机推荐
- ABAP术语-Function Library
Function Library 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/14/1068642.html Central reposi ...
- ABAP术语-Call Transaction
Call Transaction 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/15/1039270.html A data transfe ...
- 快速玩转linux(1)
快速上手Linux玩转典型应用 mark 大牛都会使用Linux, Linux命令是行业要求. 商业服务器基本都是linux 开源软件都先支持Linux(只支持) 大数据分析.机器学习首选Linux ...
- js面试之一个字符串中出现次数最多的字符是?出现几次?
最近在找面试题的时候发现了许多有趣的题目,在这里用随笔记录下~ 关于“一个字符串中出现次数最多的字符...”这种问题在笔试题中出现的频率还是很高的,我自己也找到了几种方法处理 var str = &q ...
- Java源码解析——集合框架(一)——ArrayList
ArrayList源码分析 ArrayList就是动态数组,是Array的复杂版本,它提供了动态的增加和减少元素.灵活的设置数组的大小. 一.类声明 public class ArrayList< ...
- laravel 基础 --内置函数
简介 Laravel 自带了一系列 PHP 辅助函数,很多被框架自身使用,如果你觉得方便的话也可以在代码中使用它们. https://laravelacademy.org/post/8967.html ...
- HyperLedger Fabric 1.4 架构(6.2)
6.2.1 架构演进 Fabric架构经历了0.6版本到1.0版本的演进,架构上进行了重大改进,从0.6版本的结构简单演进到可扩展.多通道的设计,在架构上有了质的飞跃:从1.0版本以后,架 ...
- RHCE7认证学习笔记17——KickStart安装系统
一.自动化安装系统工具 1.Cobbler 另一个自动化安装工具: 2.Kickstart 二.使用kickstart自动化安装系统 服务器安装的软件: 1.dhcp服务 [root@lin ...
- HI2115软件开发板V150版本AT+NSOST指令
1. 在HI2115里面,由于内存空间比较大,所以支持UDP发送指令AT+NSOST的分包 ret = sendto(socket, seq_num, data_string, length, msg ...
- github简单使用教程(转)
github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理,O(∩_∩)O ...