Objective-C学习笔记_NSDate、NSDateFormatter

一、掌握NSDate的使?

在iOS开发中,NSDate的使用场景很多,例如,聊天程序里的时间显示(几分钟前、几小时前、几天前)的计算;网络请求中的时间戳(计算当前时间距离1970年1?1?的秒数)。

NSDate是Cocoa中用于处理日期和时间的基础类,封装了某?给定的时刻(含日期、时间、时区)。使用+date方法获取当前时间。例如:NSDate *nowDate = [NSDate date]; 注意NSLog(@“%@”, nowDate); ?论你是哪个时区的时间,打印的总是0时区时间。

NSTimeinterval

NSTimeInterval(double类型),用来表?以秒为单位的时间间隔。可以使用-initWithTimeIntervalSinceNow:方法传入?个NSTimeInterval参数,创建一个NSDate对象。

例如:NSDate *tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow: 24 * 60 * 60];

NSDate *yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow: -1 * 24 * 60 * 60];取两个时间对象的间隔:NSTimeinterval = [tomorrowDate timeIntervalSinceDate: yesterdayDate];

具体实现代码如下:

#pragma mark ** NSDate 日期类
        NSDate *date = [NSDate date];  /* 0时区的时间 */
        NSLog(@"%@", date);

        /* 0时区的时间 + 秒数 = 当前时区的时间 */
        /* 获取当前的时区 */
        NSTimeZone *zone = [NSTimeZone systemTimeZone];
        NSLog(@"%@", zone);

        NSTimeZone *zone2 = [NSTimeZone localTimeZone];
        NSLog(@"%@", zone2);

        /* 获取和0时区相差的秒数 */
        NSInteger seconds = [zone secondsFromGMTForDate:date];

        /* 当前时间 */
        NSDate *localDate = [NSDate dateWithTimeIntervalSinceNow:seconds];
        NSLog(@"localDate: %@", localDate);

        NSDate *local2 = [NSDate dateWithTimeIntervalSinceNow:8 * 3600];
        NSLog(@"local2: %@", local2);

        /* 明天时间 */
        NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:8 * 3600 + 24 * 3600];
        NSLog(@"tomorrow: %@", tomorrow);

        /* 昨天时间 */
        NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:8 * 3600 - 24 * 3600];
        NSLog(@"yesterday: %@", yesterday);

#pragma mark ** NSTimeInterval 时间间隔类
        NSTimeInterval timeInterval = [tomorrow timeIntervalSinceDate:yesterday];
        NSLog(@"timeInterval: %lf", timeInterval);

        NSTimeInterval timeInterval2 = [localDate timeIntervalSince1970];
        NSLog(@"timeInterval2: %lf", timeInterval2);

        /* 快速获取当前时区的时间 */
        NSDate *dateLocal = [NSDate dateWithTimeIntervalSinceNow:[NSTimeZone localTimeZone].secondsFromGMT];
        NSLog(@"dateLocal: %@", dateLocal);

二、掌握NSDateFormatter的使?

NSDateFormatter是iOS中的日期格式类,功能是实现NSString和NSDate的互转。常见的时间格式化字符串有:y 年、M 月份、d 天、H 小时(24小时制)、h(12小时制)、am | pm 上午| 下午、m 分钟、s 秒数等。指定的日期格式:NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate转NSString

日期转化为字符串:

NSDateFormatter*formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSString *dateString = [formatter stringFromDate: [NSDate date]];

NSString转NSDate

时间字符串转化为相对应的?期:

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *dateStr = @”2008-08-08 20:08:08”;
NSDate *date = [formatter dateFromString:dateStr];

具体实现代码如下:

#pragma mark ** NSDateFormatter
        /* y 年
         * M 月
         * d 日
         * h 小时(12), H(24)
         * m 分
         * s 秒
         * a 显示上\下午
         * z 时区
         * eee 星期
         * G 公元
         */

        /* NSDate 转 字符串 */
        /* 方法1, 字符串format方法 */
        NSString *string1 = [NSString stringWithFormat:@"%@", dateLocal];
        NSLog(@"string1: %@", string1);

        /* 方法2, NSDateFormatter格式 */
        /* 步骤: 1. 新建一个格式
         *      2. 按照格式进行转换
         */
        NSDateFormatter *format1 = [[NSDateFormatter alloc] init];

        [format1 setAMSymbol:@"AM"];
        [format1 setPMSymbol:@"PM"];

        [format1 setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
        NSString *string2 = [format1 stringFromDate:date];
        NSLog(@"string2: %@", string2);
        /* NSDateFormat 自动转换为当前系统时区 */

        /* 字符串 转 NSDate */
        NSString *string3 = @"2015-04-16 19:44:16";
        NSDate *date11 = [format1 dateFromString:string3];
        NSLog(@"date11: %@", date11);

        /* 练习: 定义一个NSDateFormatter, 设置合适的格式
         * 将字符串@“2014年05?01日 10点23分18秒”转换为NSDate对象。
         */
        NSDateFormatter *exFormat = [[NSDateFormatter alloc] init];
        [exFormat setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒"];
        NSString *timeStr = @"2014年05月01日 10点23分18秒";
        NSDate *dateStr = [[exFormat dateFromString:timeStr] dateByAddingTimeInterval:[NSTimeZone localTimeZone].secondsFromGMT];
        NSLog(@"timeStrDate: %@", dateStr);

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 04:41:59

Objective-C学习笔记_NSDate、NSDateFormatter的相关文章

Objective - C学习笔记:UIView的使用方法

1.1 - (void)layoutSubviews; * 当一个控件的frame发生改变的时候就会自动调用 * 一般在这里布局内部的子控件(设置子控件的frame) * 一定要调用super的layoutSubviews方法 1.2 - (void)didMoveToSuperview; * 当一个控件被添加到父控件中就会调用 1.3 - (void)willMoveToSuperview:(UIView *)newSuperview; * 当一个控件即将被添加到父控件中会调用 @interf

Objective - C 学习笔记:UIPickerView 和 UIDatePicker的基本使用

1.UIPickerView 1.1. UIPickerView的常见属性 // 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id<UIPickerViewDataSource> dataSource; // 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择) @property(nonatomic,assign) id<UIPickerViewDelegate>

Objective - C 学习笔记:程序启动原理

1.Info.plist常见的设置 * 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 * 在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist” * 项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plist” * 项目中还有一个InfoPlist.strings的文件,跟Info.plist文件的本地化相关

objective - C学习笔记: tableView的刷新

1: 数据刷新的总体步骤 1.1: 修改模型数据 1.2: 刷新表格(刷新界面) 2: 刷新表格的方法 // 全局刷新(每一行都会重新刷新) - (void)reloadData; // 局部刷新(使用前提: 刷新前后, 模型数据的个数不变) - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; // 局部删除(使用前提: 模型数据减少的个

Objective - C学习笔记:控制器的管理

1. 如何创建一个控制器 1.1. 控制器常见的创建方式有以下几种 //1.1.1:通过storyboard创建 //1.1.2:直接创建 YHViewController *viewController = [[YHViewController alloc] init]; //1.1.3:指定xib文件来创建 YHViewController *viewController= [[YHViewController alloc] initWithNibName:@"YHViewControlle

Objective - C 学习笔记:消息机制的原理与使用

1.通知中心(NSNotificationCenter) 1.1.每一个应用程序都有一个通知中心(NSNotificationCenter*)实例,专门负责协助不同对象之间的消息通信 1.2.这就是观察者模式(Observer),任何一个对象都可以向通知中心发布通知(NSNotification*),描述自己在做什么.其他感兴趣的对象(Observer观察者)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知(NSNotification) 2.1.一个完整的通知

Objective - C 学习笔记:程序启动的完整过程

1. main函数 2. UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 3.1 delegate代理开始处理(监听)系统事件  (没有storyboard) * 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法 * 在application:didFinishLaunchingWithOptions:中创建UIWindow * 创建和

Objective - C 学习笔记:监听文本框TextField的文字改变

* 一个文本输入框的文字发生改变时,文本输入框会发出一个UITextFieldTextDidChangeNotification通知 * 因此通过监听通知来监听文本输入框的文字改变 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:textField]; // textField

Object-c 学习笔记(一)

想做IOS开发,培训之前自己先自学一段时间,于是开一篇新的笔记来记录学习的点滴吧. Objective-c是以c语言为基础的扩展集,当然首先要得熟悉c语言再去学习Objective-c,我是根据<Objective-c基础教程>来自学的.鄙人初学,如有观点不同或者错误之处请指正亦可贻笑大方. 构建Objective-c程序 我们需要先下载Xcode来作为基本的编辑器,下载安装完成后我们来新建一个Xcode Project,之后我们选择 要在Type中选择Foundation,然后选择Next,