Ios 将UTC日期转换为本地日期swift4

Ios 将UTC日期转换为本地日期swift4,ios,swift4,Ios,Swift4,全部, 我正在尝试将UTC日期转换为本地日期。下面是我的代码。但是,即使在转换之后,我也只会得到UTC的两个日期 static func getTodayDateInLocalTimeZone() -> Date{ let todaydateInUTC = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ&q

全部,

我正在尝试将UTC日期转换为本地日期。下面是我的代码。但是,即使在转换之后,我也只会得到UTC的两个日期

 static func getTodayDateInLocalTimeZone() -> Date{
    
    let todaydateInUTC = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    dateFormatter.timeZone = TimeZone(identifier: "UTC")
    let utcDateString = dateFormatter.string(from: todaydateInUTC)
    print("Date::: utcDateString: \(utcDateString)")
    
    
    // Changing to Current timezone
    let timzoneIdentiier = TimeZone.current.identifier
    let timezone = TimeZone(identifier: timzoneIdentiier)
    let abbrv = timezone?.abbreviation()
    
    let dateFormatter1 = DateFormatter()
    dateFormatter1.timeZone =  TimeZone(identifier: abbrv!)
    dateFormatter1.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
   
    print("Date:::timeZone: \(timzoneIdentiier) == \(String(describing: abbrv))")
    let formattedDate1  = dateFormatter1.date(from: utcDateString)
    print("Date:::: \(formattedDate1)") 
    return formattedDate1!
}
这是我打印时得到的

Date::: utcDateString: 2021-01-20T17:39:15+0000
Date:::timeZone: America/New_York == Optional("EST")
Date:::: Optional(2021-01-20 17:39:15 +0000)
请告诉我为什么现在改为当地时区。
谢谢

首先,日期没有时区

所以
lettodaydateinutc=Date()
实际上意味着
lettodaydate=Date()

当您希望向用户显示日期时,时区将变得相关。 因此,您不需要从utcDateString创建新的日期,而只需要从同一日期变量创建另一个日期字符串。
let-formattedDate1=dateFormatter1.date(from:utcDateString)
变为
let-tzDateString=dateFormatter1.string(from:todaydate)

这也意味着您的函数应该返回字符串而不是日期

例如:

func getTodayDateInLocalTimeZone() -> String
{
    let now = Date()
    
    // Just for debugging. Not for the result.
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    dateFormatter.timeZone = TimeZone(identifier: "UTC")
    let utcDateString = dateFormatter.string(from: now)
    print("Date::: utcDateString: \(utcDateString)")
    
    let tz = TimeZone.current
    let dateFormatter1 = DateFormatter()
    dateFormatter1.timeZone =  tz
    dateFormatter1.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    print("Date:::timeZone: \(tz) == \(String(describing: tz.abbreviation()))")
    
    let tzDateString  = dateFormatter1.string(from: now)
    print("Date:::: \(tzDateString)")
    return tzDateString
}
对我来说,这会导致:

Date::: utcDateString: 2021-01-20T18:19:44+0000
Date:::timeZone: Europe/Berlin (current) == Optional("CET")
Date:::: 2021-01-20T19:19:44+0100

谢谢你的解释,我明白了。