处理日期和时间可能很痛苦。这个项目旨在使其稍微减轻一些痛苦。这个库绝不是完整的,也不是可以完全不用担心地使用的状态,但是当涉及到处理不同格式的日期时,它应该会让生活轻松得多。
即使你得到像 ISO 8601 这样的格式的日期,事情也会很快变得混乱。主要是因为 ISO 8601 并不像 Swift 希望的那样静态。例如,以 ISO 8601 格式的日期 2018-03-08T15:49:46Z 为例。在 Swift 中解析这个字符串看起来像这样
let dateString = "2018-03-08T15:49:46Z"
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "YYYYMMdd'T'HHmmss'Z'"
let date:Date? = dateFormatter.string(from: dateString) // this will work.
到目前为止一切都很好。现在,如果我们得到另一个日期,比如:2018-03-08T15:49:46.5+03:30 现在 Swift 会抛出异常,因为指定的格式 YYYYMMdd'T'HHmmss'Z' 不再适用。
let dateString = "2018-03-08T15:49:46.5+03:30"
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "YYYYMMdd'T'HHmmss'Z'"
let date:Date = dateFormatter.string(from: dateString) // this will not work.
使用 SwiftyDates,你只需要这样做
let dateString = "2018-03-08T15:49:46Z"
let date:Date? = dateString.swiftyDateTime() // this will work
同样,另一个日期也适用
let dateString = "2018-03-08T15:49:46.5+03:30"
let date:Date = dateString.swiftyDateTime() // this will work
对于日期,你可以使用
let dateString = "2018-03-08"
let date:Date = dateString.swiftyDate() // this will work
对于日期,你可以使用
let dateString = "9:30am"
let date:TimeInterval = dateString.swiftyTime() // this will work
这个库的优点在于它也理解其他格式,例如
10.12.2017
12:30
12/25/2016
或者组合使用
12/25/2016 3:45pm
20.10.2018 23:10
最初的初步测试表明,SwiftyDates 的速度大约是 DateFormatter 的一半。考虑到增加的功能和灵活性,这似乎是一个公平的权衡。应该进行更多的性能测试,并进一步优化代码。