虽然这个问题与时差有关,但我想我可能有一个异步/闭包相关的问题。
所以我通过Alamofire从iOS应用程序上的网络服务器获得了dateTime。我做了如下比较:
let recordedDate = obj[0]["time"].stringValue //TIME FROM SERVER
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = dateFormatter.dateFromString(recordedDate)
let elapsedTime = (Int(NSDate().timeIntervalSinceDate(date!)) / 60 / 60)
//THE PROBLEM IS THAT date IS NIL.
if elapsedTime > 1{
self.isActiveLabel.text = "Offline"
}else{
self.isActiveLabel.text = "Active"
}
因此,根据我的故障排除,看起来日期没有完成处理,因为计算时间因此返回“发现无”问题。
在模拟器上不会发生此问题,因此排除日期真正为空的可能性。只有在设备上部署后才会出现问题。如何在日期准备好后运行epalsedTime?或者有更好的实践来实现这一目标。
感谢任何智慧或指导。
谢谢
答案 0 :(得分:1)
如果我理解你的问题,那基本上就是:
dateFormatter.dateFromString("2016-06-22 01:03:06 +0000")
返回nil
。
如果是这种情况,那是因为日期格式不匹配:
yyyy-MM-dd HH:mm:ss Z => 2016-06-22 01:03:06 +0000
yyyy-MM-dd HH:mm:ss => 2016-06-22 01:03:06
尝试以下代码来处理两种可能的格式:
+ (NSDate *)dateFromDateString:(NSString *)dateString {
NSDate *date = nil;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[NSLocale currentLocale]];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; // or something else
[dateFormat setTimeZone:timeZone];
// Try two ways to cover the web server return
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
date = [dateFormat dateFromString:dateString];
if (date == nil) {
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
date = [dateFormat dateFromString:dateString];
}
return date;
}
答案 1 :(得分:0)
好的,对于我的问题,我所要做的就是添加以下内容:
dateFormatter.locale = NSLocale(localeIdentifier: "us")
之后它完美地运作了。这是尝试和错误。如果有人能解释为什么?我很乐意将其标记为已接受的答案。
谢谢大家的指导。