虽然问题与时差有关,但我想我可能有一个异步/闭包相关的问题。
所以我有一个日期时间来 self 的 iOS 应用程序上的网络服务器,通过 Alamofire。我做了如下比较:
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"
}
因此,从我的故障排除来看,日期似乎在计算 elapsedTime 时尚未完成处理,因此返回“未找到”问题。
这个问题在模拟器上没有发生,所以排除了date真的是空的可能性。仅在设备上部署后才会出现问题。如何在日期准备好后运行 epalsedTime?或者是否有更好的做法来实现这一目标。
感谢任何智慧或指导。
谢谢
最佳答案
如果我没有正确理解你的问题,它基本上是:
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;
}
关于ios - 如何在 Swift 2.0 中获取以分钟为单位的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37957330/