NSDate用法

  • 创建
    //获取到的是当前时间 格林尼治 时间 +0000 表示0时区
    NSDate *date1 = [NSDate date]; //类方法
    NSDate *date2 = [NSDate alloc] init]; //alloc

    //时间戳 通常是一个字符序列,唯一地标识某一刻的时间   
    //[指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数]
    NSTimeInterval interval = [date timeIntervalSince1970]; //以秒为单位
    NSTimeInterVal interval2001 = [date timeIntervalSinceReferenceDate]; //与2001.1.1 00:00:00 的时间间隔
    NSTimeInterVal intervalNow = [date timeIntervalSinceNow]; //date被创建后 与 程序运行到这一行代码 的时间间隔
    
    //根据时间戳创建NSDate对象 类方法 和 init方法 都有,都可以
    NSDate *date3 = [NSDate dateWithTimeIntervalSince1970:123456789];
    NSDate *date4 = [NSDate dateWithTimeIntervalSinceReferenceDate:123456789];
    NSDate *date5 = [NSDate dateWithTimeIntervalSinceNow:123456789];
    //给定时间 给定时间戳
    NSDate *date6 = [NSDate dateWithTimeInterval:123456789 sinceDate:date]; 
    
  • 计算日期
    //根据今天计算昨天和明天
    //计算时间间隔
    NSTimeInterval second = 24 * 60 * 60;
    //与当前时间的时间间隔,如果 昨天 是方法的调用者,那么时间间隔就是负数
    NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-second];
    NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:second];

    //distanFuture 不可到达的未来的某个时间点
    NSDate *futureDate = [NSDate distanFuture];
    //distanPast 不可到达的过去的某个时间点
    NSDate *pastDate = [NSDate distanFuture];
    
    //判断日期是否相同
    BOOL isEqual = [pastDate isEqualToDate:futureDate];
    
    //比较两个日期 返回一个较晚的日期
    NSDate *laterDate = [futureDate laterDate:pastDate];
    
    //时间排序
    NSComparisonResult result = [pastDate compare:futureDate];
    
  • 日期类的格式化
    //NSDateFormatter
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //定义出想要的格式 EE周几
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss EE";
    NSString *dateStr = [formatter stringFromDate:date]; //默认会切换到系统当前时区

  • 日历类 和 日期组件类
    //NSCalendar 日历类 是一个单例类
    NSCalendar *calendar = [NSCalendar currentCalendar];
    //NSCalendarUnit 这个用来看我们需要哪几个时间[年、月、日、时...NSCalendarUnitYear、...Month、...Day]
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    //用NSDateComponents来接收详细信息
    NSDateComponents *components = [calendar components:uint from:date];
    NSLog(@"%@",components.description); //description 描述对象 是NSString
    //获取年份
    NSUInteger year = components.year;

    //计算两个日期差多少
    //(1)定义一个NSCalendarUnit 里面写想要比较的时间内容
    NSCalendarUnit unit2 = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitHour;
    //(2)利用NSDateComponents比较
    //参数一:需要计算的组件属性
    //参数二:起始时间
    //参数三:结束时间
    //参数四:默认给0 是一个枚举
    NSDateComponents *components2 = [calendar components:unit2 from:futureDate toDate:pastDate options:0];
    //两个日期的相隔时间 信息 都存在 components2 中
    NSLog(@"相隔年数:%ld,相隔月份:%ld,相隔时数:%ld",components2.year,components2.month,components2.hour);
    
  • 时区设置 TimeZone
    //获取所有时区的名字
    NSArray *array = [NSArray arrayWithArray:[NSTimeZone knownTimeZoneNames]]; //这个数组中存储的就是所有时区的名字

    //(1)选择时区
    NSTimeZone *timeZone = [NSTimeZone localTimeZone]; //根据系统选择当前时区
    //根据名字选择时区
    NSTimeZone *timeZoneName = [NSTimeZone timeZoneWithName:@"Europe/Rome"];
    //(2)需要用到NSDateFormatter来格式化
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //设置格式
    [formatter setDateFormatter:@"yyyy-MM-dd HH:mm:ss"]; //这一步不能少
    //将 时区 赋给 NSDateFormatter
    [formatter setTimeZone:timeZone];
    //将date转换成NSString
    NSString *str = [formatter stringFromDate:date];
    NSLog(@"str = %@",str);
    

你可能感兴趣的:(NSDate用法)