只有一个设备和NSDate的奇怪行为

时间:2014-07-04 12:46:58

标签: ios nsdate nscalendar nsdatecomponents nsformatter

经过数周的工作,我终于昨天发布了我的申请:-) 20个iphone已下载我的应用程序,只有一个有问题。我完全无法调试它,因为我无法访问有问题的设备。

首先,我得到json(即使在设备上解码得很好),然后我提取日期:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *date = [formatter dateFromString:[myData objectForKey:@"date"]];

我想知道这个日期是什么时候,所以我使用这个函数:

[DateManager getDateFromNow:date];

这导致了这段代码:

+ (NSString *) getDateFromNow: (NSDate*) aDate{
    NSDate *now = [[NSDate alloc] init];

    // Get the system calendar
    NSCalendar *sysCalendar = [NSCalendar currentCalendar];

    // Get conversion to months, days, hours, minutes
    unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:aDate  toDate:now  options:0];

    int second =[conversionInfo second];
    int minute =[conversionInfo minute];
    int hour =[conversionInfo hour];
    int day =[conversionInfo day];

    if(day != 0){
        if(day == 1){
            return [NSString stringWithFormat:@"1 day ago"];
        }else{
            return [NSString stringWithFormat:@"%i days ago", day];
        }
    }else if(hour != 0){
        if(hour == 1){
            return [NSString stringWithFormat:@"1 hour ago"];
        }else{
            return [NSString stringWithFormat:@"%i hours ago", hour];
        }
    }else if(minute !=0){
        if(minute == 1){
            return [NSString stringWithFormat:@"1 minute ago"];
        }else{
            return [NSString stringWithFormat:@"%i minutes ago", minute];
        }
    }else{
        if(second == 1){
            return [NSString stringWithFormat:@"1 second ago"];
        }else{
            return [NSString stringWithFormat:@"%i seconds ago", second];
        }
    }

}

我的问题是,对于只有一个设备,日期计算为' 4932天前',并且对于所有其他设备,它运行良好。 这是日期:date: "2014-07-04 13:38:01"

你有什么可能出错的线索吗?

非常感谢...

编辑:4932天前是2001年1月的第一个。苹果参考日期。

1 个答案:

答案 0 :(得分:0)

我认为问题是systemTimeZoneNSCalendar

当您进行日期字符串转换时,您应该设置NSCalendar。

NSCalendar *sysCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
// set your NSDateFormatter with calendar.
formatter.calendar = sysCalendar;

这将有所帮助,还有一件事是你应该始终从服务器端设置 UTC日期时间戳

感谢。也许它会帮助你。