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

Convert UTC date to local date swift4

全部,

我正在尝试将 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)

请告诉我为什么现在更改为本地时区。 谢谢

首先,日期没有时区。

所以let todaydateInUTC = Date()其实就是let todaydate = Date().

当您想向用户显示日期时,时区就变得重要了。 因此,无需从 utcDateString 创建新日期,您只需从同一日期变量创建另一个日期字符串。 let formattedDate1 = dateFormatter1.date(from: utcDateString) 变为 let tzDateString = dateFormatter1.string(from: todaydate).

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

例如:

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