【问题标题】:Convert and compare NSString and NSDate转换和比较 NSString 和 NSDate
【发布时间】:2014-12-01 18:46:36
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 函数和变量名应该以小写字母开头,而不是大写字母

标签: swift nsstring nsdate converter


【解决方案1】:

dateFromString结果使用可选绑定可能更容易,然后在switch语句中使用日期的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!")
    }
}

【讨论】:

  • 感谢您,但无法正常工作:在 Limite 2014-12-03 11:30:00 2014-12-03 13:30:00 2014-12-04 14:00:00 2014 之前的 datefromstring -12-04 14:30:00 2014-12-04 15:00:00 2014-12-04 15:30:00 限制后的日期
  • 什么不起作用?我不知道这意味着什么。
  • 嗯,有些日期不匹配,限制是 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 不匹配...
  • 您删除了其中一个案例吗?如果您通过开关,它 必须 匹配其中一个。您可能想在 if let... 中添加一个 else 以查看是否有未解析的日期(尽管看起来不错)。
  • 没有删除案例。我尝试了您的“其他”提示,并且有效地有时 dateFormatter.dateFromString(word[index] return nil (但 word[index] 不是 nil),在这种情况下,与 switch case 不匹配。
【解决方案2】:
if (((datefromstring?.isEqualToDate(Limite))) != nil) {

好吧,想想看:datefromstring?.isEqualToDate(Limite) 要么是 YES,要么是 NO(Swift truefalse)。这些都不是nil。所以这个条件总是成功的。

这个truefalse 确实被包裹在一个Optional 中。那是因为您在 Optional 上调用 isEqualToDate。但是,您在这里测试的是 Optional datefromstring 是否为 nil - 您没有测试它包装的是 true 还是 false,因为它们两者都不是无。

因此,您没有表达您想要表达的区别。

【讨论】:

  • 是的,我还在写,内特。冷却你的喷气机。
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多