Swift 日期转换时间不同

Swift Date Conversion Not Same Time

我正在使用以下函数将字符串转换为日期,以便可以使用 DateFormatter 将其转换为不同的格式:

func changeDate(date1: String) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    let date = dateFormatter.date(from:date1)!

    let dateFormatter2 = DateFormatter()
    dateFormatter2.dateFormat = "MMM-dd-yyyy / HH:mm zzz"
    let finaldate = dateFormatter2.string(from: date)

    return finaldate
}

我想要一个看起来像 2017-08-29T11:49:19 的字符串,并将 08/29/2017 07:49 EDT 显示为一个字符串。

Date 个对象表示一个绝对时间点。但是,使用 DateFormatter 生成的 Date 对象的字符串表示不代表绝对时间点,因此它们对应于特定时区。当您使用 DateFormatter 而未明确设置 TimeZone 时,它默认为用户的当前时区。

如果您想将输入字符串用作 UTC 时间戳,则需要在生成 Date 时将 DateFormattertimeZone 设置为 UTC目的。您应该将第二个 DateFormattertimeZone 保留在用户的 timeZone 上,这是默认值。

func changeDate(date1: String) -> String {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

    guard let date = dateFormatter.date(from:date1) else return {""}

    let outputDateFormatter = DateFormatter()
    outputDateFormatter.dateFormat = "MMM-dd-yyyy / HH:mm zzz"
    return outputDateFormatter.string(from: date)
}