Swift:基于字符的子串

标签 swift substring nsdate

我从 API 获取信息,其中一个字段是以下格式的 DateTime:

2014-12-12T14:44:18.973

我想删除“T”和它后面的任何内容,所以最后我得到:

2014-12-12

关于如何使用 Swift 执行此操作的任何想法或线索?不幸的是,我不能直接创建 NSDate,因为它会抛出异常。

最后,我想要 12-12-2014 之类的字符串格式。

谢谢!

最佳答案

幸运的是,您可以直接从中创建一个 NSDate,如下所示:

extension String {
    func toDateFormattedWith(format:String)-> NSDate {
        let formatter = NSDateFormatter()
//      formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)  // you can set GMT time 
        formatter.timeZone = NSTimeZone.localTimeZone()        // or as local time
        formatter.dateFormat = format
        return formatter.dateFromString(self)!
    }
}

有很多方法可以只从该字符串中选择日期。我会使用以下方法:

let myDate = "2014-12-12T14:44:18.973".componentsSeparatedByString("T")[0].toDateFormattedWith("yyyy-MM-dd") // "Dec 12, 2014, 12:00 AM"

您还可以创建一个扩展来从 Date 对象中提取该信息:

public extension NSDate {
    var day:    Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,    fromDate: self).day    }
    var month:  Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth,  fromDate: self).month  }
    var year:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,   fromDate: self).year   }

    var dateAt12am: NSDate {
        return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 0, minute: 0, second: 0, nanosecond: 0)!
    }
}

let myDate1 = "2014-12-12T14:44:18.973".toDateFormattedWith("yyyy-MM-dd\'T\'HH:mm:ss.SSS").dateAt12am

println(myDate1)  // "2014-12-12 02:00:00 +0000" (12am local time)

如果你需要引用,你可以使用这个:

enter image description here

关于Swift:基于字符的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575636/

相关文章:

ios - 如何将函数传递给另一个设置其完成闭包的函数?

ios - 使用 MapKit 和 Swift 打开给定地址中的 map

python - python中两个列表之间的部分字符串匹配

c++ - 查找字母子串

ios - 预定的本地通知不规则

arrays - 如何使用 sorted 对元组数组进行排序? (无法使用类型参数列表调用 'sorted')

swift - 计算耗时并更新所有任务

c - 替换子串错误

swift - 我怎样才能用当前时间计算一些位置的打开和关闭时间

iOS - NSDate 不正确地添加/减去时区差异