iOS-时间与日期详解

作者: 船长_ | 来源:发表于2015-11-21 21:26 被阅读15230次
    • 时间戳:从1970年1月1号 00:00:00开始走过的毫秒数
    • 注意:1秒==1000毫秒
    // 时间字符串 -> 时间戳
    NSString *string = @"1745645645645";
    NSTimeInterval second = string.longLongValue / 1000.0;
    
    // 时间戳 -> NSDate *
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
    NSLog(@"%@", date);
    

    注意:使用[NSCalendar currentCalendar],iOS8以后会有bug,要加判断

    // 判断方法一:
    // 宏书写注意:建议不要全是小写,要有大写,否则书写时候参数有ken'neng不提示
    #define iOS(version) ([UIDevice currentDevice].systemVersion.doubleValue >= (version))
    
    NSCalendar *calendar = nil;
    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
        calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    } else {
        calendar = [NSCalendar currentCalendar];
    }
    
    // 判断方法二:
    NSCalendar *calendar = nil;
    // NSCalendar不提示这个respondsToSelector:方法,但是的确有这个方法
    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
        calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    } else {
        calendar = [NSCalendar currentCalendar];
    }
    

    1.NSDate的详细介绍

    1.通过date方法创建出来的对象,就是当前时间对象;
    NSDate *date = [NSDate date];
    NSLog(@"now = %@", date);
    
    2.获取当前所处时区
    NSTimeZone *zone = [NSTimeZone systemTimeZone];
    NSLog(@"now = %@", zone);
    
    3.获取当前时区和指定时间差
    NSInteger seconds = [zone secondsFromGMTForDate:date];
    NSLog(@"seconds = %lu", seconds);
    
    NSDate *nowDate = [date dateByAddingTimeInterval:seconds];
    NSLog(@"nowDate = %@", nowDate);
    
    4.获取当前时间  NSDate --> NSString
    NSDate *date = [NSDate date];
    
    创建一个时间格式化对象
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
    按照什么样的格式来格式化时间
    formatter.dateFormat = @"yyyy年MM月dd日 HH时mm分ss秒 Z";
    formatter.dateFormat = @"yyyy/MM/dd HH/mm/ss Z";
    formatter.dateFormat = @"MM-dd-yyyy HH-mm-ss";
    
    NSString *res = [formatter stringFromDate:date];
    

    2.字符串转时间

        // 时间字符串
        NSString *str = @"2014-03-11 06:44:11 +0800";
    
        // 1.创建一个时间格式化对象
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
        // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z";
    
        // 3.利用时间格式化对象让字符串转换成时间 (自动转换0时区/东加西减)
        NSDate *date = [formatter dateFromString:str];
    
        NSLog(@"%@",date);
    

    3.时间转换成字符串

        NSDate *now = [NSDate date];
    
        // 1.创建一个时间格式化对象
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
        // 2.设置时间格式化对象的样式
        formatter.dateFormat = @"yyyy年MM月dd日 HH时mm分ss秒 +0800";
    
        // 3.利用时间格式化对象对时间进行格式化
        NSString *str = [formatter stringFromDate:now];
    
        NSLog(@"%@",str);
    

    4.利用日历比较两个时间的差值

         // 时间字符串
        NSString *str = @"2012-03-11 06:44:11 +0800";
    
        // 1.创建一个时间格式化对象
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
        // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z";
    
        // 3.字符串转换成时间/自动转换0时区/东加西减
        NSDate *date = [formatter dateFromString:str];
        NSDate *now = [NSDate date];
      
       // 注意获取calendar,应该根据系统版本判断
        NSCalendar *calendar = [NSCalendar currentCalendar];
    
        NSCalendarUnit type = NSCalendarUnitYear |
        NSCalendarUnitMonth |
        NSCalendarUnitDay |
        NSCalendarUnitHour |
        NSCalendarUnitMinute |
        NSCalendarUnitSecond;
        
        // 4.获取了时间元素
        NSDateComponents *cmps = [calendar components:type fromDate:date toDate:now options:0];
    
        NSLog(@"%ld年%ld月%ld日%ld小时%ld分钟%ld秒钟", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);
    

    5.日期比较

    // 时间字符串
    NSString *createdAtString = @"2015-11-20 11:10:05";
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *createdAtDate = [fmt dateFromString:createdAtString];
    
    // 手机当前时间
    NSDate *nowDate = [NSDate date];
    
    /**
     NSComparisonResult的取值
     NSOrderedAscending = -1L, // 升序, 越往右边越大
     NSOrderedSame,  // 相等
     NSOrderedDescending // 降序, 越往右边越小
     */
    // 获得比较结果(谁大谁小)
    NSComparisonResult result = [nowDate compare:createdAtDate];
    if (result == NSOrderedAscending) { // 升序, 越往右边越大
        NSLog(@"createdAtDate > nowDate");
    } else if (result == NSOrderedDescending) { // 降序, 越往右边越小
        NSLog(@"createdAtDate < nowDate");
    } else {
        NSLog(@"createdAtDate == nowDate");
    }
    

    相关文章

      网友评论

      • 雾满天空:那个时间戳是不是按照伦敦0时区,本初子午线的时区来计算的,然后转换的时候成标准时区的时间,然后再计算到1970年的时间??
      • MakeThatChange:谢谢了
      • Wang66:整理地不错!
      • VickyLanLan:学习了
      • wokenshin:使用[NSCalendar currentCalendar],iOS8以后会有bug? 大神啥bug勒?我一直都是这么用的诶 求指导

      本文标题:iOS-时间与日期详解

      本文链接:https://www.haomeiwen.com/subject/anzlhttx.html