如何获取格式化格式swift的系统时间?

How to get system time in formatted style swift?

我有这样的时间必须发送到服务器:

2019-03-06T14:49:55+01:00

我以为我可以这样做:

NSDate(timeIntervalSince1970: TimeInterval(NSDate().timeIntervalSince1970))

但我有这样的时间:

2021-01-24 15:42:31 +0000

我认为我必须使用用户解码模式,所以使用这样的方式:

let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss+z"

let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"
        
let time = NSDate(timeIntervalSince1970: TimeInterval(NSDate().timeIntervalSince1970))

if let date = dateFormatterGet.date(from: time.description) {
   print(dateFormatterPrint.string(from: date))
} else {
   print("There was an error decoding the string")
}

但它的输出是:

There was an error decoding the string

什么意思这次不能这样解码了。我做错了什么?

您正在从一个日期的时间间隔创建一个字符串,其中三个转换是浪费的。

转换失败,因为 time.description 与格式 yyyy-MM-dd HH:mm:ss+z

不匹配

要获取带时区的 ISO8601 字符串,日期格式为 yyyy-MM-dd'T'HH:mm:ssZ,您必须指定固定的语言环境

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let isoString = formatter.string(from: Date())

Rob 在评论中建议有一个更短的方法

let formatter = ISO8601DateFormatter()
formatter.timeZone = .current
let isoString = formatter.string(from: Date())