美文网首页知识点
NSDateFormatter的8小时问题

NSDateFormatter的8小时问题

作者: Smallwolf_JS | 来源:发表于2016-03-02 20:40 被阅读1196次
    //创建当前时间,以格林尼治时间为准
            NSDate * date = [NSDate date];
            
            NSLog(@"%@", date);
            
            //某一时间过了多少秒,创建一个新的时间点
            NSDate * date2 = [NSDate dateWithTimeInterval:3600 sinceDate:date];
            
            NSLog(@"%@", date2);
            
            //从当前时间过了多少秒,生成新的时间点
            NSDate * date3 = [NSDate dateWithTimeIntervalSinceNow:-3600];
            NSLog(@"%@", date3);
            
            //从1970/01/01 0时 GMT为准,过后多少秒,生成新的时间
            NSDate * date4 = [NSDate dateWithTimeIntervalSince1970:3600];
            NSLog(@"%@", date4);
            
            //求对象的时间与制定时间,相差多少秒
            NSTimeInterval secs = [date timeIntervalSinceDate:date4];
            NSLog(@"%lf", secs);
            
            //求对象时间与系统时间相差多少秒
            secs = [date timeIntervalSinceNow];
            NSLog(@"*******%lf", secs);
            
            //求对象时间与1970-1-1 GMT相差多少秒
            secs = [date timeIntervalSince1970];
            NSLog(@"%lf", secs);
            
            
            //未来时间,用于暂停定时器,将定时器启动时间设为遥远的未来 Never
            NSDate * futureDate = [NSDate distantFuture];
            //过去时间,用于重启定时器,将定时器启动时间设为遥远的过去 ever
            NSDate * pastDate = [NSDate distantPast];
            
            //创建时间戳
            NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
            
            //使用时间戳的目的,是为了自定义时间的打印格式
            dateFormatter.dateFormat = @"yyyy年MM月dd日 HH:mm:ss.S";
            
            dateFormatter.dateFormat = @"yy-MM-dd ahh时mm分ss秒";
            //hh变成12小时制 a<> am pm
            
            NSLog(@"%@", [dateFormatter stringFromDate:date]);
    
    
    //NSDate也可以转换为NSString
    - (NSString *)StringFromDate:(NSDate *)date{
        NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSString * string = [formatter stringFromDate:date];
        return string;
    }
    //NSStrinig可以转换为NSDate
    - (NSDate *)DateFromString:(NSString *)string{
        NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
    //    [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSDate * date = [formatter dateFromString:string];
        return date;
    }
    

    在时间字符串转换为NSDate并打印出来的时候会发现少了8小时这是为什么呢,因为时区选的不对,要想纠正这8小时有两种办法:
    1.[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    2.[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    相关文章

      网友评论

        本文标题:NSDateFormatter的8小时问题

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