2

经过数周的工作,我终于在昨天发布了我的应用程序 :-) 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 日。苹果参考日期。

4

1 回答 1

0

我认为问题是systemTimeZoneNSCalendar

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

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

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

谢谢。也许它会帮助你。

于 2014-07-04T13:17:03.250 回答