Created
August 17, 2017 10:32
-
-
Save julesjans/360fe51d707382d82cf5b1b87df61c92 to your computer and use it in GitHub Desktop.
Handle time conversions from .NET APIs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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