2016-06-22 41 views
0

尽管问题与时间差有关,但我想我可能会遇到异步/关闭相关的问题。如何在Swift 2.0中以分钟为单位获得时间差异

所以我有一个datetime来自我的iOS应用程序通过Alamofire网络服务器。我做一比较,如下:由时间elapsedTime进行计算,因此返回“发现无”的问题

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" 
} 

所以从我的故障,它看起来像日期didnt完成处理。

这个问题在模拟器上不会发生,因此排除该日期的可能性真的是空的。问题只发生在设备上。如何在日期准备好后运行epalsedTime?还是有更好的做法来实现这一点。

任何智慧或指导表示赞赏。

谢谢

+1

在你的代码中没有异步调用,所以控制将从上到下流动。 –

+2

如果'recordedDate'不是'nil'但是'date'是,那么问题是日期字符串与您交给日期格式化程序的格式不匹配。 –

+1

格式化程序中'ss'后面可能有错误的空间。此外,你似乎没有解开你的选择。 –

回答

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; 
} 
0

OK所以我的问题都是我必须添加以下内容:

dateFormatter.locale = NSLocale(localeIdentifier: "us") 

它在那之后很好地工作。这是尝试和错误。如果有人能解释为什么?我很乐意将其标记为已接受的答案。

谢谢大家的指导。

Ref:NSDateFormatter returns nil in swift and iOS SDK 8.0

相关问题