转换并比较NSString和NSDate

时间:2014-12-01 18:46:37

标签: swift nsstring nsdate converter

我在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时)。

先谢谢。

2 个答案:

答案 0 :(得分:0)

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

好吧,考虑一下:datefromstring?.isEqualToDate(Limite)是YES还是NO(Swift truefalse)。这些都不是nil。所以这种情况总是成功的。

确实,truefalse包含在一个Optional中。这是因为您在“可选”上调用了isEqualToDate。但是,您在此处测试的是,可选datefromstring是否为零 - 您没有测试它包含的内容是true还是false,因为它们两个都是非零的。

因此,您没有表达您希望表达的区别。

答案 1 :(得分:0)

dateFromString结果使用可选绑定可能更容易,然后在switch语句中使用日期&#39; compare方法:

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