经过数周的工作,我终于昨天发布了我的申请:-) 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月的第一个。苹果参考日期。
答案 0 :(得分:0)
我认为问题是systemTimeZone
或NSCalendar
。
当您进行日期字符串转换时,您应该设置NSCalendar。
NSCalendar *sysCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
// set your NSDateFormatter with calendar.
formatter.calendar = sysCalendar;
这将有所帮助,还有一件事是你应该始终从服务器端设置 UTC日期或时间戳。
感谢。也许它会帮助你。