Swift:如何创建日期时间戳和格式作为ISO 8601,RFC 3339,UTC时区? [英] Swift: how to create a date time stamp and format as ISO 8601, RFC 3339, UTC time zone?
本文介绍了Swift:如何创建日期时间戳和格式作为ISO 8601,RFC 3339,UTC时区?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何生成日期时间戳,使用
How to generate a date time stamp, using the format standards for ISO 8601 and RFC 3339?
The goal is a string that looks like this:
"2015-01-01T00:00:00.000Z"
Format:
- year, month, day, as "XXXX-XX-XX"
- the letter "T" as a separator
- hour, minute, seconds, milliseconds, as "XX:XX:XX.XXX".
- the letter "Z" as a zone designator for zero offset, a.k.a. UTC, GMT, Zulu time.
Best case:
- Swift source code that is simple, short, and straightforward.
- No need to use any additional framework, subproject, cocoapod, C code, etc.
I've searched StackOverflow, Google, Apple, etc. and haven't found a Swift answer to this.
The classes that seem most promising are NSDate
, NSDateFormatter
, NSTimeZone
.
Related Q&A: How do I get ISO 8601 date in iOS?
Here's the best I've come up with so far:
var now = NSDate()
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
println(formatter.stringFromDate(now))
解决方案
Xcode 8.2 • Swift 3.0.2
extension Formatter {
static let iso8601: DateFormatter = {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
return formatter
}()
}
extension Date {
var iso8601: String {
return Formatter.iso8601.string(from: self)
}
}
extension String {
var dateFromISO8601: Date? {
return Formatter.iso8601.date(from: self) // "Mar 22, 2017, 10:22 AM"
}
}
Usage:
let stringFromDate = Date().iso8601 // "2017-03-22T13:22:13.933Z"
if let dateFromString = stringFromDate.dateFromISO8601 {
print(dateFromString.iso8601) // "2017-03-22T13:22:13.933Z"
}
Xcode 7.3.1 • Swift 2.2.1
extension NSDate {
struct Formatter {
static let iso8601: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
return formatter
}()
}
var iso8601: String { return Formatter.iso8601.stringFromDate(self) }
}
extension String {
var dateFromISO8601: NSDate? {
return NSDate.Formatter.iso8601.dateFromString(self)
}
}
Usage:
let stringFromDate = NSDate().iso8601 // "2016-06-18T05:18:27.935Z"
if let dateFromString = stringFromDate.dateFromISO8601 {
print(dateFromString.iso8601) // "2016-06-18T05:18:27.935Z"
}
这篇关于Swift:如何创建日期时间戳和格式作为ISO 8601,RFC 3339,UTC时区?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文