NSDate、NSDateFormatter、NSCalendar

#import "ViewController.h"

 

@interface ViewController ()

 

@property (nonatomic, strong) NSDateFormatter   * dateFormatter;

@property (nonatomic, strong) NSDate            * today;

@property (nonatomic, strong) NSDate            * tomorrow;

@property (nonatomic, strong) NSDate            * yesterday;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    

    //获取今天昨天和明天等等(NSDate内容)

    [self getYesterdayOrtomorrowTime];

    //日历(NSCalendar相关内容)

    [self aboutCalendar];

}

 

- (void)aboutCalendar{

    

    NSCalendar *calendar = [NSCalendar currentCalendar];//日历

    

    /**

     NSCalendarUnitEra                = kCFCalendarUnitEra,//年代

     NSCalendarUnitYear               = kCFCalendarUnitYear,//年份

     NSCalendarUnitMonth              = kCFCalendarUnitMonth,//月份

     NSCalendarUnitDay                = kCFCalendarUnitDay,//几号

     NSCalendarUnitHour               = kCFCalendarUnitHour,//几点

     NSCalendarUnitMinute             = kCFCalendarUnitMinute,//几分

     NSCalendarUnitSecond             = kCFCalendarUnitSecond,//几秒

     NSCalendarUnitWeekday            = kCFCalendarUnitWeekday,//

     NSCalendarUnitWeekdayOrdinal     = kCFCalendarUnitWeekdayOrdinal,

     NSCalendarUnitQuarter            NS_ENUM_AVAILABLE(10_6, 4_0) = kCFCalendarUnitQuarter,

     NSCalendarUnitWeekOfMonth        NS_ENUM_AVAILABLE(10_7, 5_0) = kCFCalendarUnitWeekOfMonth,

     NSCalendarUnitWeekOfYear         NS_ENUM_AVAILABLE(10_7, 5_0) = kCFCalendarUnitWeekOfYear,

     NSCalendarUnitYearForWeekOfYear  NS_ENUM_AVAILABLE(10_7, 5_0) = kCFCalendarUnitYearForWeekOfYear,

     NSCalendarUnitNanosecond         NS_ENUM_AVAILABLE(10_7, 5_0) = (1 << 15),

     NSCalendarUnitCalendar           NS_ENUM_AVAILABLE(10_7, 4_0) = (1 << 20),

     NSCalendarUnitTimeZone           NS_ENUM_AVAILABLE(10_7, 4_0) = (1 << 21),

     */

    

    /**************just return one value(从日期中获取到年月日等等)************/

    NSInteger unitData = [calendar component:NSCalendarUnitYearForWeekOfYear fromDate:self.today];

    NSLog(@"unitData == %ld",unitData);

    

    /**************比较两个日期的年月日等************/

 

    /**

     *  

     NSOrderedAscending = -1L,  升序

     NSOrderedSame,             相同

     NSOrderedDescending        降序

     */

    NSComparisonResult result = [calendar compareDate:self.yesterday toDate:self.tomorrow toUnitGranularity:NSCalendarUnitYear];

    NSLog(@"%ld", result);

    

    /**************get components from an object of NSDate, e.g.year month day****************/

    NSDateComponents * components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self.today];

    NSDateComponents * components2 = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self.yesterday];

    NSLog(@"components   0 == %@", components);

    

    /*****************difference of two NSDate object, result:e.g.1 year 1 month 0 day 4 minute*******************/

    NSDateComponents * components1 = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:self.today toDate:self.tomorrow options:0];

    NSLog(@"components   1 == %@", components1);

    

    /*****************difference of two NSDateComponents object, result:e.g.1 year 1 month 0 day 4 minute*********************/

    NSDateComponents * components3 = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth fromDateComponents:components2 toDateComponents:components options:0];

    NSLog(@"components3 == %@", components3);

 

    /**************** get components from date with timeZone******************/

    NSDateComponents * components4 = [calendar componentsInTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Beijing"] fromDate:self.today];

    NSLog(@"components4 == %@", components4);

    NSDate * zzdate = [calendar dateFromComponents:components4];

    NSLog(@"zzdate == %@", zzdate);

    

 

}

 

#pragma mark - 根据时间间隔获得时间戳

- (NSString *)getTimeStampWithTimeInterval:(CGFloat)timeInterval{

    

    NSDate * date = [NSDate dateWithTimeIntervalSince1970:timeInterval];

    NSString * timeStr = [self.dateFormatter stringFromDate:date];

    NSLog(@"%@", timeStr);

    return timeStr;

}

 

#pragma mark - 根据传入的时间获取时间戳

- (NSString *)getTimeStampWithDate:(NSDate *)date{

    

    NSString * tempStr = [self.dateFormatter stringFromDate:date];

    NSLog(@"%@", tempStr);

    return tempStr;

}

 

#pragma mark - 获取当前时间,昨天、明天等时间

- (void)getYesterdayOrtomorrowTime{

    

    //今天目前的时间

    self.today = [NSDate date];

    NSLog(@"today == %@", self.today);

    

    //设置时间间隔

    NSTimeInterval oneDayTimeInterval = 365 * 56 * 60 * 60 + 120 + 50.6;

   

    //明天

    self.tomorrow = [NSDate dateWithTimeIntervalSinceNow:oneDayTimeInterval];

    NSLog(@"tomorrow == %@", self.tomorrow);

    

    //昨天

    self.yesterday = [NSDate dateWithTimeIntervalSinceNow:-oneDayTimeInterval];

    NSLog(@"yesterday == %@", self.yesterday);

    

    //比较两个日期,早一些的

    NSDate * earlierDate = [self.yesterday earlierDate:self.today];

    NSLog(@"earlierDate == %@", earlierDate);

    

    //比较两个日期,晚一些的

    NSDate * laterDate = [self.yesterday laterDate:self.tomorrow];

    NSLog(@"laterDate == %@", laterDate);

}

 

- (NSDateFormatter *)dateFormatter{

    

    if (!_dateFormatter) {

        

        _dateFormatter = [[NSDateFormatter alloc] init];

        

        /***************************设置时间格式**************************/

        //设定时间格式,这里可以设置成自己需要的格式

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

        

        /**系统自带的时间格式

         

         *  dateFormatter.dateStyle = kCFDateFormatterMediumStyle;

         

         NSDateFormatterNoStyle     = kCFDateFormatterNoStyle,

         NSDateFormatterShortStyle  = kCFDateFormatterShortStyle,//“11/23/37” or “3:30pm”

         NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,//\"Nov 23, 1937\"

         NSDateFormatterLongStyle   = kCFDateFormatterLongStyle,//\"November 23, 1937” or “3:30:32pm\"

         NSDateFormatterFullStyle   = kCFDateFormatterFullStyle//“Tuesday, April 12, 1952 AD” or  "3:30:42pm PST"

         

         */

        /*************************设置时区**************************/

        NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];

        [_dateFormatter setTimeZone:sourceTimeZone];

        

    }

    return _dateFormatter;

}

 

posted @ 2016-07-05 15:31  Mr__________Li  阅读(725)  评论(0编辑  收藏  举报