ios - 如何在 Swift 2.0 中获取以分钟为单位的时差

标签 ios swift asynchronous closures

虽然问题与时差有关,但我想我可能有一个异步/闭包相关的问题。

所以我有一个日期时间来 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/

相关文章:

javascript - 为什么 react native 元素在 iPhone plus 上的排列方式不同

swift - 如何使用 textFieldDidBeginediting 从文本字段的 Collection View 中获取单元格的索引路径

c# - 与 Web 服务相关的同步与异步

java - 从 Web 服务器异步调用应用程序

ios - 字典在展开可选值时意外发现 nil

ios - 如何使 UITableView 的节标题完全透明

ios - Viewcontroller 在动画完成之前显示

ios - 使用 Xcode 7.0.1 升级 El Capitan 后出现 Alamofire Domain=NSPOSIXErrorDomain Code=2 错误

ios - 附加导航栏在模态转场推送中从顶部滑动

c# - 如何为不接受取消 token 的异步函数设置超时?