【问题标题】:How to get system time in formatted style swift?如何以格式化样式快速获取系统时间?
【发布时间】:2021-01-24 15:48:20
【问题描述】:

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

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

这意味着我这次不能以这种方式解码。我做错了什么?

【问题讨论】:

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

标签: swift nsdate decoding


【解决方案1】:

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

转换失败,因为time.descriptionyyyy-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 在 cmets 中建议有一种更短的方法

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多