Skip to content

Instantly share code, notes, and snippets.

@julesjans
Created August 17, 2017 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save julesjans/360fe51d707382d82cf5b1b87df61c92 to your computer and use it in GitHub Desktop.
Save julesjans/360fe51d707382d82cf5b1b87df61c92 to your computer and use it in GitHub Desktop.
Handle time conversions from .NET APIs
import Foundation
// Further Reading:
// https://technet.microsoft.com/en-us/library/aa258277(v=sql.80).aspx
// http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
// http://www.w3.org/TR/NOTE-datetime
// https://en.wikipedia.org/wiki/ISO_8601
extension Date {
static func dateFromServerString(string: String) -> Date {
// Handles difference between ISO-8601 & extended (MSSQL datetime and smalldatetime)
let dateFormatter = DateFormatter()
let regex = try! NSRegularExpression(pattern: "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.", options:.caseInsensitive)
let matches = regex.matches(in: string, options:[], range: NSMakeRange(0, NSString(string: string).length))
dateFormatter.dateFormat = (matches.count >= 1) ? "YYYY-MM-dd'T'HH:mm:ss.SZ" : "YYYY-MM-dd'T'HH:mm:ssZ"
return dateFormatter.date(from: string)!
}
}
var serverDateBasic = Date.dateFromServerString(string: "2016-04-29T16:44:22Z")
var serverDateBasicTimeZone = Date.dateFromServerString(string: "2016-04-29T16:44:22-04:00")
var serverDateDecimal = Date.dateFromServerString(string: "2016-04-29T16:44:22.47894Z")
var serverDateDecimalTimeZone = Date.dateFromServerString(string: "2016-04-29T16:44:22.47894+01:00")
// DATE STRING FORMATS
let dateFormatter = DateFormatter()
var date = Date()
// ERA
dateFormatter.dateFormat = "G"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "GGGG"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "GGGGG"
dateFormatter.string(from: date)
// YEAR
dateFormatter.dateFormat = "y"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "Y"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "u" // Extended Year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "U" // Cyclic Year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "UUUU" // Cyclic Year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "UUUUU" // Cyclic Year
dateFormatter.string(from: date)
// QUARTER
dateFormatter.dateFormat = "Q"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "QQQ"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "QQQQ"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "q" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "qqq" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "qqqq" // Stand-alone
dateFormatter.string(from: date)
// MONTH
dateFormatter.dateFormat = "M"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "MM"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "MMM"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "MMMM"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "MMMMM"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "L" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "LL" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "LLL" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "LLLL" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "LLLLL" // Stand-alone
dateFormatter.string(from: date)
// WEEK
dateFormatter.dateFormat = "w" // Week of year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "W" // Week of month
dateFormatter.string(from: date)
// DAY
dateFormatter.dateFormat = "d" // Day of month
dateFormatter.string(from: date)
dateFormatter.dateFormat = "dd" // Day of month
dateFormatter.string(from: date)
dateFormatter.dateFormat = "D" // Day of year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "DD" // Day of year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "DDD" // Day of year
dateFormatter.string(from: date)
dateFormatter.dateFormat = "F" // Day of week in moth
dateFormatter.string(from: date)
dateFormatter.dateFormat = "g" // Modified Julian day
dateFormatter.string(from: date)
// WEEKDAY
dateFormatter.dateFormat = "E"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "EEEE"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "EEEEE"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "EEEEEE"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "c" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "ccc" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "cccc" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "ccccc" // Stand-alone
dateFormatter.string(from: date)
dateFormatter.dateFormat = "cccccc" // Stand-alone
dateFormatter.string(from: date)
// PERIOD
dateFormatter.dateFormat = "a"
dateFormatter.string(from: date)
// HOUR
dateFormatter.dateFormat = "h"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "hh"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "H"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "HH"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "K"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "KK"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "k"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "kk"
dateFormatter.string(from:date)
// MINUTE
dateFormatter.dateFormat = "m"
dateFormatter.string(from:date)
// SECOND
dateFormatter.dateFormat = "s"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "ss"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "SSSSSSSS"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "ss.SSSSSSSS"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "A"
dateFormatter.string(from:date)
// TIME ZONES
dateFormatter.dateFormat = "z"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "zzzz"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "Z"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "ZZZZ"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "ZZZZZ"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "O"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "OOOO"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "v"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "vvvv"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "V"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "VV"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "VVV"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "VVVV"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "X"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "XX"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "XXX"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "XXXX"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "XXXXX"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "x"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "xx"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "xxx"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "xxxx"
dateFormatter.string(from:date)
dateFormatter.dateFormat = "xxxxx"
dateFormatter.string(from:date)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment