zoukankan      html  css  js  c++  java
  • NSDate 那点事

    转载自:http://my.oschina.net/yongbin45/blog/150114

    1. NSDate对象用来表示一个具体的时间点。
    2. NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体。
    3. NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示。

    可以快速地获取的时间点有:

    1 now    (当前时间点)
    2 相对于1 January 2001, GMT的时间点
    3 相对于1970的时间点
    4 distantFuture   (不可达到的未来的某个时间点)
    5 distantPast     (不可达到的过去的某个时间点

    根据http://www.gnustep.org/实现的NSDate的版本:

    01 @interface NSDate : NSObject  <NSCoding, NSCopying>
    02 {
    03     NSTimeInterval _secondsSinceRef;
    04 }
    05  
    06 ……
    07  
    08 - (id) initWithTimeInterval:(NSTimeInterval) secsToBeAdded
    09               sinceDate:(NSDate *) anotherDate;       相对于已知的某个时间点
    10 - (id) initWithTimeIntervalSinceNow:(NSTimeInterval) secsToBeAdded;        相对于当前时间
    11 - (id) initWithTimeIntervalSince1970:(NSTimeInterval)seconds;        相对于1970年1月1日0时0分0秒
    12 - (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;       相对于2001年1月1日0时0分0秒
    13  
    14 ……
    15  
    16 @end

    可以看出,NSDate类确实只是一个相对的时间点,NSTimeInterval的单位是秒(s),_secondsSinceRef则说明NSDate对象是相对于ReferenceDate(2001年1月1日0时0分0秒)的一个时间点。

    同时,根据Cocoa框架的设计原则,每个类都有一个“指定初始化方法”(指定初始化方法是参数最全,且其他初始化方法都会调用的初始化方法)。http://www.gnustep.org/实现的版本以方法:

    1 - (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;

    作为指定初始化方法,也就是说所有的时间点都转化为了相对referenceDate的时间点(时间点都是相对的,因为时间本身就是相对的)。

    NSDate中最常用的方法一般是:

    01 NSDate *now = [NSDate date];    // [[NSDate alloc] init]
    02 NSDate *dateFromNow = [NSDate dateWithTimeIntervalSinceNow:60];
    03 NSDate *dateFromAnotherDate = [[NSDate alloc] initWithTimeInterval:60 sinceDate:dateFromNow];
    04  
    05 NSTimeInterval timeInterval1 = [now timeIntervalSinceDate:dateFromNow];
    06 NSTimeInterval timeInterval2 = [now timeIntervalSinceNow];
    07  
    08  
    09  
    10 //-------------------------------------------------------------
    11 NSDate *distantPast = [NSDate distantPast];          //  可以表示的最早的时间
    12 NSDate *distantFuture = [NSDate distantFuture];      //  可以表示的最远的未来时间
    13  
    14 NSString *stringDate = @"12/31/9999";
    15 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    16 [dateFormatter setDateFormat:@"MM/dd/yyyy"];
    17 NSDate *dateCheck = [dateFormatter dateFromString:stringDate];
    18 NSLog(@"Date = %@", dateCheck);
    19  
    20 Output:
    21 Date = 1999-12-30 16:00:00 +0000
    22  
    23 *iOS中用NSDate表示的时间只能在distantPast和distantFuture之间!
  • 相关阅读:
    从产品原型到交互设计的过渡——初学者心得
    谈什么是卡片式设计?
    vertical-align:middle的居中细节调整
    line-height:2和line-height:2em的区别,它们是有区别的
    css中!important的用法总结
    使用em为单位制作两列弹性布局
    如何动态修改下拉列表的默认选中项
    【转】深入浅出协议栈
    经典排序js实现
    js 数组的拷贝
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879346.html
Copyright © 2011-2022 走看看