通过NSCalendar与NSDate的年月日时分秒等元素进行交互

在iOS中,表示时间的类是NSDate,但是NSDate仅仅保存了一个时刻(据1970年1月1日凌辰开始的秒数)。

想获取这个时刻的年,月,日,时,分,秒等等信息,光从NSDate是不行的。

而获取这些元素的途径是通过NSCalendar类来进行的。

下面的代码展示了如何从一个NSDate获取这些元素,并通过指定的元素来创建NSDate对象

//首先创建NSCalendar的实例,可以简单的用当前实例,也可以创建其它的历法对应的实例。

NSCalendar *cal = [NSCalendar currentCalendar];

//下面通过NSCalendar来获取各个元素,保存在类NSDateComponents的实例中

//需要通过函数参数components指定希望获取的元素,详细的枚举后面会列出

NSDateComponents *dateComps = [cal components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:startDate];

int year = [dateComps year];

int month = [dateComps month];

int day = [dateComps day];

int hour = [dateComps hour];

int minute = [dateComps minute];

int second = [dateComps second];

//也可以通过NSCanlendar和NSDateComponents来创建NSDate

NSDate *newDate = [cal dateFromComponents:dateComps];


enum {

NSEraCalendarUnit = kCFCalendarUnitEra,

NSYearCalendarUnit = kCFCalendarUnitYear,

NSMonthCalendarUnit = kCFCalendarUnitMonth,

NSDayCalendarUnit = kCFCalendarUnitDay,

NSHourCalendarUnit = kCFCalendarUnitHour,

NSMinuteCalendarUnit = kCFCalendarUnitMinute,

NSSecondCalendarUnit = kCFCalendarUnitSecond,

NSWeekCalendarUnit = kCFCalendarUnitWeek /* NS_DEPRECATED(10_4, 10_7, 2_0, 5_0) */,

NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,

NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal,

#if MAC_OS_X_VERSION_10_6 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED

NSQuarterCalendarUnit = kCFCalendarUnitQuarter,

#endif

#if MAC_OS_X_VERSION_10_7 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_5_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED

NSWeekOfMonthCalendarUnit = kCFCalendarUnitWeekOfMonth,

NSWeekOfYearCalendarUnit = kCFCalendarUnitWeekOfYear,

NSYearForWeekOfYearCalendarUnit = kCFCalendarUnitYearForWeekOfYear,

#endif

#if MAC_OS_X_VERSION_10_7 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED

NSCalendarCalendarUnit = (1 << 20),

NSTimeZoneCalendarUnit = (1 << 21),

#endif

};

typedef NSUInteger NSCalendarUnit;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容