关于NSDate的一些实际工作遇到的坑

来源:互联网 发布:人工智能招聘 编辑:程序博客网 时间:2024/05/29 18:45
1.下午两点22 ,得到的是早上6点22,不一致,如何解决呢?

NSDate *date = picker.date;

    NSTimeZone *timeZone=[NSTimeZonesystemTimeZone];

    NSInteger seconds=[timeZonesecondsFromGMTForDate:date];

    NSDate *newDate=[datedateByAddingTimeInterval:seconds];

    NSLog(@"%@",newDate);

    

    NSString *str = [NSStringstringWithFormat:@"%@",newDate];

    str = [str substringToIndex:16];

    NSLog(@"%@",str);

 转换后的,str 即为

2,公司的接口在mac端模拟器运行,网络数据请求正常,在真机上面跑,网络数据无法请求。接口是需要传入一个long类型的时间戳,源代码如下

  NSDate * lastDay = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:date];
    NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
    formatter.dateFormat = @"yyyy-MM-dd";
    NSString * dateStr = [formatter stringFromDate:lastDay];
    _curriumView.currentDay.text = dateStr;
    NSLog(@"%@",_curriumView.currentDay.text);
    NSDate * date =[formatter dateFromString:_curriumView.currentDay.text];
    NSTimeInterval timeInterval = [date timeIntervalSince1970];
    NSString * timeStr = [NSString stringWithFormat:@"%f",timeInterval];
    long dateNum = [timeStr doubleValue]*1000+60*1000;
    NSLog(@"时间%ld",dateNum);
    if (_role.roleId == 102) {
        [[ParentList sharedInstance]getChildrenArr:dateNum withBlock:^(NSArray *arr) {
            _parentArr = arr;
            for (int i = 0; i<arr.count; i++) {
                UITableView * parentTable = [self.view viewWithTag:10+i];
                [parentTable reloadData];
            }
        }];
结果发现红色标注过的代码打印出来的时间是错误的,(服务器是java写的,传入的时间戳应该是13位的,因此乘以1000),初步排查为13位的超出了long的取值范围,因此将long改成long long,但是结果还是错误的时间戳,一般错误主要是因为cpu不一样造成的,后续发现是long long类型转化为long类型,中间变量NSNumber,以及后面的应该加一个小数点才可以,具体的原因估计是涉及到cpu不通引起的,我用的模拟器是5c

更改过后代码是:

NSDate * lastDay = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:date];
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd";
NSString * dateStr = [formatter stringFromDate:lastDay];
_curriumView.currentDay.text = dateStr;
NSLog(@"%@",_curriumView.currentDay.text);
NSDate * date =[formatter dateFromString:_curriumView.currentDay.text];
NSTimeInterval timeInterval = [date timeIntervalSince1970];
NSString * timeStr = [NSString stringWithFormat:@"%f",timeInterval];
    NSNumber * num = [NSNumber numberWithLongLong:[timeStr longLongValue]];
    long long dateNum = [num longValue]*1000.0+60*1000.0;

注:java语言和ios语言的long类型取值范围是不一样的,为了适配在ios端取long long类型

  1.  时间戳转时间的方法  
  2.     NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:1296035591];  
  3.     NSLog(@"1296035591  = %@",confromTimesp);        
  4.     NSString *confromTimespStr = [formatter stringFromDate:confromTimesp];  
  5.     NSLog(@"confromTimespStr =  %@",confromTimespStr);  
  6. 时间戳转时间的方法:  
  7. NSDateFormatter* formatter = [[NSDateFormatter alloc] init];  
  8. [formatter setDateStyle:NSDateFormatterMediumStyle];  
  9. [formatter setTimeStyle:NSDateFormatterShortStyle];  
  10. [formatter setDateFormat:@"yyyyMMddHHMMss"];  
  11. NSDate *date = [formatter dateFromString:@"1283376197"];  
  12. NSLog(@"date1:%@",date);  
  13. [formatter release];  


0 0
原创粉丝点击