Chris Mendez in For Developers, Swift

Swift: UTC date/time string for current time

I find that the best way to manage dates, times, and time zones is to store everything in the database as Coordinated Universal Time (UTC) then present it back to the user in a local format. This prevents any mistakes writing rules for "daylight savings time".

Swift works well with Apple's NSCalendar and here's how to capture the current time in UTC format.

import Foundation

let date = NSDate()

if let utcCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) {  
    if let utcTimeZone = NSTimeZone(abbreviation: "UTC") {

        utcCalendar.timeZone = utcTimeZone

        let ymdhmsUnitFlags: NSCalendarUnit = .YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit | .HourCalendarUnit | .MinuteCalendarUnit | .SecondCalendarUnit

        let utcDateComponents = utcCalendar.components(ymdhmsUnitFlags, fromDate: date)

        // Create string of form "yyyy-mm-dd hh:mm:ss"
        let utcDateTimeString = NSString(format: "%04u-%02u-%02u %02u:%02u:%02u",
            UInt(utcDateComponents.year),
            UInt(utcDateComponents.month),
            UInt(utcDateComponents.day),
            UInt(utcDateComponents.hour),
            UInt(utcDateComponents.minute),
            UInt(utcDateComponents.second))
    }
}