Ios Swift NSDate ISO 8601格式
我正在研究Swift中的日期格式,并尝试将字符串日期转换为NSDate,将NSSate转换为字符串日期(ISO 8601格式) 这是我的密码Ios Swift NSDate ISO 8601格式,ios,swift,nsdate,nsdateformatter,iso8601,Ios,Swift,Nsdate,Nsdateformatter,Iso8601,我正在研究Swift中的日期格式,并尝试将字符串日期转换为NSDate,将NSSate转换为字符串日期(ISO 8601格式) 这是我的密码 let stringDate = "2016-05-14T09:30:00.000Z" // ISO 8601 format let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" // ISO 8601 let da
let stringDate = "2016-05-14T09:30:00.000Z" // ISO 8601 format
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" // ISO 8601
let date = dateFormatter.dateFromString(stringDate)
print("Date = \(date)") // Output is 2016-05-14 16:30:00 +0000
// Again converting it date to string using stringFromDate
print("\(dateFormatter.stringFromDate(date!))") // 2016-05-14T09:30:00.000Z
我正在试图理解为什么我要以GMT格式获取NSDate(在时间09:30到16:30之间增加7小时)
如果我将NSDate
date
变量转换为字符串,那么我将获得原始字符串日期。这里发生了什么?您的格式字符串错误。您指示文字Z
,而不是“Z为祖鲁时间”。删除单引号:
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
您应该始终将区域设置指定为
en\u US\u POSIX
。这一点经常被忽视,以至于苹果在(Sierra)中创建了ISO8601DateFormatter
类。如果你的目标是iOS 11.0+/+(High Sierra),你可以使用ISO8601DateFormatter
和with InternetDateTime
和with FractivelSeconds
选项,像这样:
let stringDate = "2016-05-14T09:30:00.000Z" // ISO 8601 format
let iso8601DateFormatter = ISO8601DateFormatter()
iso8601DateFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
let date = iso8601DateFormatter.date(from: stringDate)
print("Date = \(date)") // Output is 2016-05-14 09:30:00 +0000
有关在旧系统上使用日期格式化程序的信息,请参阅:
如果使用的是固定格式的日期,则应首先设置
将日期格式化程序的区域设置设置为适合您的固定
格式。在大多数情况下,最好选择“en_US_POSIX”,即
专门设计用于产生美国英语成绩的语言环境
无论用户和系统偏好如何。“en_US_POSIX”也是
时间不变(如果美国在未来某个时候改变
“en_US”的日期格式将改变,以反映新的
行为,但“en_US_POSIX”不会),以及机器之间
(“en_US_POSIX”在iOS上的工作原理与在OSX上的工作原理相同,也与它的工作原理相同
不在其他平台上运行)
以下是基于提供的示例代码的Swift 5片段:
let stringDate = "2016-05-14T09:30:00.000Z" // ISO 8601 format
let rfc3339DateFormatter = DateFormatter()
rfc3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
rfc3339DateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSS'Z'"
rfc3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = rfc3339DateFormatter.date(from: stringDate)
print("Date = \(date)") // Output is 2016-05-14 09:30:00 +0000
您的目标是macOS 10.12还是更高版本?有一个新类
ISO8601DateFormatter
可能会有所帮助。否。我正在开发macOS 10.11.6和iOS 9。我将检查该类ISO8601数据格式化程序。谢谢