Swift: UTC date/time string for current time

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. The clear benefit is that it reduces any mistakes when working through "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))
    }
}