2014-12-01 95 views
0

我有一个函数,在NSWATE转换和比较NSString与swift中的一些问题。转换和比较NSString和NSDate

func Parse(pouet : NSString, Limite : NSDate) { 
     let word = pouet.componentsSeparatedByString("\"") 

     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" 

     for var index = 11; (index < word.count-6); index+=6 { 
      var datefromstring = dateFormatter.dateFromString(word[index] as String) 

      if (((datefromstring?.isEqualToDate(Limite))) != nil) { 
       println("<<<") 
       println(datefromstring) 
       println(Limite) 
       println(">>>") 
      } 
     } 
    } 

输出:

<<< 
Optional(2014-12-02 10:30:00 +0000) 
2014-12-04 18:36:32 +0000 
>>> 

有什么不对?我认为只有当DateFromString和Limite相同时才需要打印(理想情况下,当Limite高于datefromstring时)。

提前致谢。

+0

函数和变量名称应该以小写字母,而不是一个大写字母开头 – matt 2014-12-01 19:11:38

回答

0
if (((datefromstring?.isEqualToDate(Limite))) != nil) { 

嗯,想一想:datefromstring?.isEqualToDate(Limite)是YES或NO(SWIFT truefalse)。这两个都不是nil。所以这种情况总是成功的。

确实,这个truefalse被封装在一个可选项中。那是因为你在可选的情况下打电话isEqualToDate。但那么你在这里测试的是是否datefromstring为零 - 你是不是测试它是否包装truefalse,因为他们两个是非零。

因此,您并未表达您希望表达的区别。

+2

是,我还在写作,奈特。冷却你的飞机。 – matt 2014-12-01 19:12:48

0

它可能更容易使用可选的dateFromString结果绑定,然后使用日期的compare方法switch语句:

if let datefromstring = dateFormatter.dateFromString(word[index] as String) { 
    switch datefromstring.compare(Limite) { 
    case .OrderedAscending: 
     println("datefromstring before Limite") 
    case .OrderedDescending: 
     println("datefromstring after Limite") 
    case .OrderedSame: 
     println("exact match!") 
    } 
} 
+0

感谢此,但不工作:datefromstring之前Limite 2014-12-03 11:30:00 2014-12-03 13:30:00 2014-12-04 14:00:00 2014-12- 04 14:30:00 2014-12-04 15:00:00 2014-12-04 15:30:00 datefromstring after Limite – Guitou 2014-12-01 19:23:10

+0

什么不起作用?我不知道这意味着什么。 – 2014-12-01 19:30:27

+0

嗯,有些约会不匹配,limite是2014-12-04 19:38:03那么,这3日期2014-12-02 11:30:00,2014-12-02 13:30:00和2014 -12-02 15:00:00比赛无案例... – Guitou 2014-12-01 19:40:43