美文网首页知识点
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