我从API获取信息,其中一个字段是此格式的DateTime:
2014-12-12T14:44:18.973
我想删除" T"以及最后的任何事情,我得到:
2014-12-12
有关如何使用Swift执行此操作的任何想法或线索?不幸的是,我不能直接创建一个NSDate,因为它会抛出异常。
最后,我希望以字符串格式提供类似12-12-2014的内容。
谢谢!
答案 0 :(得分:3)
幸运的是,你可以直接创建一个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)
如果您需要参考,可以使用:
答案 1 :(得分:2)
这实际上并不太糟糕。您要找的是rangeOfString()
以找出“T”的位置。如果你打电话给.startIndex
,你可以找到第一次出现“T”的地方。
一旦你有了这个,你就可以从字符串的开头到那一点创建一个子字符串,如下所示:
let date: String = dateTime.substringWithRange(Range<String.Index>(start: dateTime.startIndex, end: dateTime.rangeOfString("T")!.startIndex))
如果您想将其转换为NSDate
,可以使用NSDateFormatter
:
let formatter: NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let newDate: NSDate = formatter.dateFromString(date)! // "Dec 12, 2014, 12:00 AM"
如果你最后不想要那个时间片而只想以不同于API返回的样式输出日期,你可以添加:
formatter.dateStyle = .ShortStyle // Change this to modify the style of the date that is returned in the next line
let formattedDate: String = formatter.stringFromDate(newDate) // "12/12/14"