Search code examples
iosswiftdatetimezonensdateformatter

Converting UTC to EST in Swift


I have a string of text in my application that conveys a time and the date, such as let time = "2017-07-09T09:17:08+00:00". I want to take this string, which is in UTC, and convert it to a string that presents the time in EST. For my example, the resulting string would be 2017-07-09T05:17:08+00:00. How can this be done?

I've tried using

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.timeZone = TimeZone.current
let date = dateFormatter.date(from:time!)!

but printing the date gives me the same time in UTC.


Solution

  • All you need to do is to use a DateFormatter to convert your Date object into a String. By default, the date will be formatted to local time.

    // First, get a Date from the String
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    let date = dateFormatter.date(from:time!)!
    
    // Now, get a new string from the Date in the proper format for the user's locale
    dateFormatter.dateFormat = nil
    dateFormatter.dateStyle = .long // set as desired
    dateFormatter.timeStyle = .medium // set as desired
    let local = dateFormatter.string(from: date)
    

    Note that there is no need to set any timezone for either set of code in this case.