iOS SDK详解之NSCalendar & NSDate?Components

原创Blog,转载请注明出处

blog.csdn.net/hello_hwc

欢饮关注我的iOS SDK详解专栏

http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html



前言:NSCalendar 和 NSDate?Components是有关iOS 时间相关API很重要的两个类。最近刚好用到,这里就整理下。


概念

  • NSCalendar 顾名思义就是日历,封装了系统如何按照年月日的方式来组织时间,组织时间的方式和地区,时区有很大关系
  • NSDate?Components 只是一个容器,容器中详细包含了年月日时分等信息。
  • NSDate 就是一个绝对的时间,可以换算成相对1970s的时差。

举例

拆分一个时间

OC

  NSDate * date = [NSDate date];//当前时间
    NSCalendar * calendar = [NSCalendar currentCalendar];//当前用户的calendar
    NSDateComponents * components = [calendar components:NSCalendarUnitMinute | NSCalendarUnitMonth | NSCalendarUnitHour | NSCalendarUnitDay fromDate:date];
    NSLog(@"%ld月%ld日%ld时%ld分" ,(long)components.month,(long)components.day,(long)components.hour,(long)components.minute);

Swift

   let date = NSDate()
   let calendar = NSCalendar.currentCalendar()
   let components = calendar.components(NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute, fromDate:date)
   NSLog("%ld月%ld日%ld时%ld分" ,components.month, components.day, components.hour, components.minute)


相对序号

例如,查看今天是在今年的第几周

  NSCalendar * calendar = [NSCalendar currentCalendar];
    NSDate * currentDate = [NSDate date];
    NSInteger week = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitYear forDate:currentDate];
    NSLog(@"今天是今年的第%ld周",week);


根据拆分时间返回NSDate

OC

 NSDateComponents * components = [[NSDateComponents alloc] init];
    components.year = 2015;
    components.month = 7;
    components.day = 11;
    components.hour = 10;
    components.minute = 30;
    components.second = 20;
    NSCalendar * calendar = [NSCalendar currentCalendar];
    NSDate * date = [calendar dateFromComponents:components];

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy年MM月dd日hh时mm分ss秒";
    NSString * str = [formatter stringFromDate:date];
    NSLog(@"%@",str);

Swift

  let components = NSDateComponents()
        components.year = 2015
        components.month = 7
        components.day = 11
        components.hour = 10
        components.minute = 30
        components.second = 20
        let calendar = NSCalendar.currentCalendar()
        let date = calendar.dateFromComponents(components)

        let formatter = NSDateFormatter();
        formatter.dateFormat = "yyyy年MM月dd日hh时mm分ss秒";
        let str = formatter.stringFromDate(date!);
        println(str)


相对时间

现在往后11天10小时

OC

 NSDateComponents * components = [[NSDateComponents alloc] init];

    components.day = 11;
    components.hour = 10;
    NSCalendar * calendar = [NSCalendar currentCalendar];
    NSDate * currentDate = [NSDate date];
    NSDate * nextData = [calendar dateByAddingComponents:components toDate:currentDate options:NSCalendarMatchStrictly];
    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];

    formatter.dateFormat = @"yyyy年MM月dd日hh时mm分ss秒";
    NSString * str = [formatter stringFromDate:nextData];
    NSLog(@"%@",str);

Swift

let components = NSDateComponents()

components.day = 11;
components.hour = 10;

let calendar = NSCalendar.currentCalendar();
let currentDate = NSDate()
let nextDate = calendar.dateByAddingComponents(components, toDate: currentDate, options:NSCalendarOptions.MatchStrictly)

let formatter = NSDateFormatter();

formatter.dateFormat = "yyyy年MM月dd日hh时mm分ss秒";
let  str = formatter.stringFromDate(nextDate!)
NSLog("%@",str);


这个月有多少天

 NSCalendar * calendar = [NSCalendar currentCalendar];
    NSDate * currentDate = [NSDate date];
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:currentDate];

其他

创建不同地区的NSCalendar

initWithCalendarIdentifier:

其中有效的identifer

NSString * const NSGregorianCalendar;
NSString * const NSBuddhistCalendar;
NSString * const NSChineseCalendar;
NSString * const NSHebrewCalendar;
NSString * const NSIslamicCalendar;
NSString * const NSIslamicCivilCalendar;
NSString * const NSJapaneseCalendar;
NSString * const NSRepublicOfChinaCalendar;
NSString * const NSPersianCalendar;
NSString * const NSIndianCalendar;
NSString * const NSISO8601Calendar;


一周的开始日期

– firstWeekday


时区和地区

locale
timeZone


所有的NSCalendarUnit

   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 = kCFCalendarUnitYearForWeekOfYear
   NSCalendarCalendarUnit = (1 << 20),
   NSTimeZoneCalendarUnit = (1 << 21),

版权声明:本文为博主原创文章,如需转载请注明出处

时间: 2024-12-20 00:04:32

iOS SDK详解之NSCalendar & NSDate?Components的相关文章

iOS SDK详解之NSScanner-分析String

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:NSScanner是分析String,把String转为substring和数字的很好的工具.它使用一个NSString初始化,使用的时候通常从开头处扫描直到结尾. 本文会先举出两个例子,然后详细的讲解NSScanner的方法.源码是

iOS SDK详解之NSCoding协议

原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:NSCoding是对iOS中的Model类进行编码和解码必须要遵循的协议,如果一个对象要被归档,那么这个协议是必须的. NSCoding要实现两个方法 - initWithCoder: //解码 - enc

IOS SDK详解

来源:http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html?page=1#42803301 博客专栏>移动开发专栏>IOS SDK详解 分享到:新浪微博腾讯微博IOS SDK详解 本专栏从IOS SDK中常用的Framework出发,继而深入的介绍各个Framework.每个Framework博主都会进行Demo 收藏 订阅 最新更新文章 [移动开发] IOS SDK详解之CALayer(二) 原创Blog,转载请注明出处

iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS-SDK详解专栏,在这里你能找到很多iOS开发基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言: 在做应用的UI设计的时候,如果属性能够在Interface Builder的图形化界面进行设置,并且动态的预览到效果,那样无疑会大大提高应用的开发效率.而XCode为我们提供了这样的一种方式,就是使用IBInspe

IOS SDK详解之KVC

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:本文的架构 KVC的定义 KVC的几个场景 希望,通过本文让不了解KVC的同学入门,KVC在IOS开发中是个比较重要的概念,也是理解KVO的基础. 一 KVC的定义 KVC的全称是key-value coding,通过key-value的方式来访问属性.在很多地方,KVC是非常方便的. 属性 @property (strong,nonatomic) NSString * message; 赋值 [self set

iOS SDK详解之模糊(毛玻璃)效果效果

原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 前言: 在iOS 8 之前,想要实现模糊效果,一般会使用一些Github库,当然自己定制也可以,其原理就是用Core Image进行一些数字图像处理(因为电子出身,本课的时候做过,用矩阵来做).不过,到了iOS 8之后,这一切变的非常简单,因为Apple公开了之前的几个私有API. Demo效果 三种Blur Vibrancy(也就是在Blur上加一些想要强调的部分) Demo

IOS SDK详解之沙盒(一)图解+小工具

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: IOS沙盒机制限制了App的访问权限,进而保护用户的数据信息. 一 查看沙盒结构 和一些百度来的博客显示隐藏稳文件的方式不同,本文也提供两种方式,简单粗暴. 方式一 使用工具simpholders(推荐) 下载链接 http://simpholders.com/ 效果如图 方式二 直接使用代码 用以下代码,log出documents/路径 NSURL * url = [[[NSFileManager defau

iOS SDK详解之App使用Touch ID认证

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:从iOS 8.0之后,Apple 开放了App使用Touch ID来认证.但是有几点要注意: App只是把认证的过程代理给iOS系统了,并不能获得指纹的具体信息 不要试图把指纹信息和其他的数据库比较,在我写的这天还是不可能的. 使用的效果图 开始验证 验证失败 支持的设备 iPhone 5s + iPad Air 2 + iPad Mini 3 + 如何使用 导入使用的framework #import <Loc

IOS SDK详解之拍照/相册(默认+自定义拍照界面)

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: 本来要更新NSURLSession的UploadTask的,结果写那个Demo的时候想要写成拍照上传,然后就想到先写一个关于拍照的Demo吧.本文会先介绍下如何使用系统提供的界面拍照和选择相册,然后自定义拍照界面.注意,本文使用的是UIImagePickerController,所以不能完全的自定义,如果想要彻底的自定义拍照,建议选择AV Foundation这个框架来做 Demo效果 进入系统的拍照界面 进入