Swift:基于字符的子串

时间:2014-12-20 00:04:03

标签: swift substring nsdate

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

2014-12-12T14:44:18.973

我想删除" T"以及最后的任何事情,我得到:

2014-12-12

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

最后,我希望以字符串格式提供类似12-12-2014的内容。

谢谢!

2 个答案:

答案 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)

如果您需要参考,可以使用:

enter image description here

答案 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"