Last active
May 22, 2021 14:56
-
-
Save fbongcam/ec64d6f1074253fc82e7cfa43f92f4f4 to your computer and use it in GitHub Desktop.
Collection of date formats in Swift
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
/* | |
Collection of date formats | |
@author Filip Bongcam | |
Useful for determining format of date when unknown, | |
when converting string to date | |
Usage: | |
To determine unknown format of date (as String) | |
' dateFormat_collection.determineDateFormat(date: "String") ' | |
To just access the collection | |
' dateFormat_collection.dateFormats ' | |
' dateFormat_collection.timeZones ' | |
*/ | |
class dateFormat_collection { | |
/* | |
TimeZone abbrevations | |
*/ | |
static let timeZones_abbrevations = [ | |
/* | |
Wikipedia | |
Source: https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations | |
*/ | |
"ACDT" : "+1030", // UTC +10:30 | |
"ACST" : "+0930", // UTC +09:30 | |
"ACT" : "−0500", // UTC−05 | |
"ACT" : ("+0630", "+0900"), // UTC+06:30 – UTC+09 | |
"ACWST" : "+0845", // UTC +08:45 | |
"ADT" : "−0300", // UTC−03 | |
"AEDT" : "+1100", // UTC+11 | |
"AEST" : "+1000", // UTC+10 | |
"AET" : ("+1000", "+1100"), // UTC+10 - UTC+11 | |
"AFT" : "+0430", // UTC +04:30 | |
"AKDT" : "−0800", // UTC−08 | |
"AKST" : "−0900", // UTC−09 | |
"ALMT" : "+0600", // UTC+06 | |
"AMST" : "−0300", // UTC−03 | |
"AMT" : "−0400", // UTC−04 | |
"AMT" : "+0400", // UTC+04 | |
"ANAT" : "+1200", // UTC+12 | |
"AQTT" : "+0500", // UTC+05 | |
"ART" : "−0300", // UTC−03 | |
"AST" : "+0300", // UTC+03 | |
"AST" : "−0400", // UTC−04 | |
"AWST" : "+0800", // UTC+08 | |
"AZOST" : "+0000", // UTC+00 | |
"AZOT" : "−0100", // UTC−01 | |
"AZT" : "+0400", // UTC+04 | |
"BNT" : "+0800", // UTC+08 | |
"BIOT" : "+0600", // UTC+06 | |
"BIT" : "−1200", // UTC−12 | |
"BOT" : "−0400", // UTC−04 | |
"BRST" : "−0200", // UTC−02 | |
"BRT" : "−0300", // UTC−03 | |
"BST" : "+0600", // UTC+06 | |
"BST" : "+1100", // UTC+11 | |
"BST" : "+0100", // UTC+01 | |
"BTT" : "+0600", // UTC+06 | |
"CAT" : "+0200", // UTC+02 | |
"CCT" : "+0630", // UTC +06:30 | |
"CDT" : "−0500", // UTC−05 | |
"CDT" : "−0400", // UTC−04 | |
"CEST" : "+0200", // UTC+02 | |
"CET" : "+0100", // UTC+01 | |
"CHADT" : "+1345", // UTC +13:45 | |
"CHAST" : "+1245", // UTC +12:45 | |
"CHOT" : "+0800", // UTC+08 | |
"CHOST" : "+0900", // UTC+09 | |
"CHST" : "+1000", // UTC+10 | |
"CHUT" : "+1000", // UTC+10 | |
"CIST" : "−0800", // UTC−08 | |
"CKT" : "−1000", // UTC−10 | |
"CLST" : "−0300", // UTC−03 | |
"CLT" : "−0400", // UTC−04 | |
"COST" : "−0400", // UTC−04 | |
"COT" : "−0500", // UTC−05 | |
"CST" : "−0600", // UTC−06 | |
"CST" : "+0800", // UTC+08 | |
"CST" : "−0500", // UTC−05 | |
"CT" : ("−0600", "−0500"), // UTC−06 - UTC−05 | |
"CVT" : "−0100", // UTC−01 | |
"CWST" : "+0845", // UTC +08:45 | |
"CXT" : "+0700", // UTC+07 | |
"DAVT" : "+0700", // UTC+07 | |
"DDUT" : "+1000", // UTC+10 | |
"DFT" : "+0100", // UTC+01 | |
"EASST" : "−0500", // UTC−05 | |
"EAST" : "−0600", // UTC−06 | |
"EAT" : "+0300", // UTC+03 | |
"ECT" : "−0400", // UTC−04 | |
"ECT" : "−0500", // UTC−05 | |
"EDT" : "−0400", // UTC−04 | |
"EEST" : "+0300", // UTC+03 | |
"EET" : "+0200", // UTC+02 | |
"EGST" : "+0000", // UTC+00 | |
"EGT" : "−0100", // UTC−01 | |
"EST" : "−0500", // UTC−05 | |
"FET" : "+0300", // UTC+03 | |
"FJT" : "+1200", // UTC+12 | |
"FKST" : "−0300", // UTC−03 | |
"FKT" : "−0400", // UTC−04 | |
"FNT" : "−0200", // UTC−02 | |
"GALT" : "−0600", // UTC−06 | |
"GAMT" : "−0900", // UTC−09 | |
"GET" : "+0400", // UTC+04 | |
"GFT" : "−0300", // UTC−03 | |
"GILT" : "+1200", // UTC+12 | |
"GIT" : "−0900", // UTC−09 | |
"GMT" : "+0000", // UTC+00 | |
"GST" : "−0200", // UTC−02 | |
"GST" : "+0400", // UTC+04 | |
"GYT" : "−0400", // UTC−04 | |
"HDT" : "−0900", // UTC−09 | |
"HAEC" : "+0200", // UTC+02 | |
"HST" : "−1000", // UTC−10 | |
"HKT" : "+0800", // UTC+08 | |
"HMT" : "+0500", // UTC+05 | |
"HOVST" : "+0800", // UTC+08 | |
"HOVT" : "+0700", // UTC+07 | |
"ICT" : "+0700", // UTC+07 | |
"IDLW" : "−1200", // UTC−12 | |
"IDT" : "+0300", // UTC+03 | |
"IOT" : "+0300", // UTC+03 | |
"IRDT" : "+0430", // UTC +04:30 | |
"IRKT" : "+0800", // UTC+08 | |
"IRST" : "+0330", // UTC +03:30 | |
"IST" : "+0530", // UTC +05:30 | |
"IST" : "+0100", // UTC+01 | |
"IST" : "+0200", // UTC+02 | |
"JST" : "+0900", // UTC+09 | |
"KALT" : "+0200", // UTC+02 | |
"KGT" : "+0600", // UTC+06 | |
"KOST" : "+1100", // UTC+11 | |
"KRAT" : "+0700", // UTC+07 | |
"KST" : "+0900", // UTC+09 | |
"LHST" : "+1030", // UTC +10:30 | |
"LHST" : "+1100", // UTC+11 | |
"LINT" : "+1400", // UTC+14 | |
"MAGT" : "+1200", // UTC+12 | |
"MART" : "−0930", // UTC −09:30 | |
"MAWT" : "+0500", // UTC+05 | |
"MDT" : "−0600", // UTC−06 | |
"MET" : "+0100", // UTC+01 | |
"MEST" : "+0200", // UTC+02 | |
"MHT" : "+1200", // UTC+12 | |
"MIST" : "+1100", // UTC+11 | |
"MIT" : "−0930", // UTC −09:30 | |
"MMT" : "+0630", // UTC +06:30 | |
"MSK" : "+0300", // UTC+03 | |
"MST" : "+0800", // UTC+08 | |
"MST" : "−0700", // UTC−07 | |
"MUT" : "+0400", // UTC+04 | |
"MVT" : "+0500", // UTC+05 | |
"MYT" : "+0800", // UTC+08 | |
"NCT" : "+1100", // UTC+11 | |
"NDT" : "−0230", // UTC −02:30 | |
"NFT" : "+1100", // UTC+11 | |
"NOVT" : "+0700", // UTC+07 | |
"NPT" : "+0545", // UTC +05:45 | |
"NST" : "−0330", // UTC −03:30 | |
"NT" : "−0330", // UTC −03:30 | |
"NUT" : "−1100", // UTC−11 | |
"NZDT" : "+1300", // UTC+13 | |
"NZST" : "+1200", // UTC+12 | |
"OMST" : "+0600", // UTC+06 | |
"ORAT" : "+0500", // UTC+05 | |
"PDT" : "−0700", // UTC−07 | |
"PET" : "−0500", // UTC−05 | |
"PETT" : "+1200", // UTC+12 | |
"PGT" : "+1000", // UTC+10 | |
"PHOT" : "+1300", // UTC+13 | |
"PHT" : "+0800", // UTC+08 | |
"PKT" : "+0500", // UTC+05 | |
"PMDT" : "−0200", // UTC−02 | |
"PMST" : "−0300", // UTC−03 | |
"PONT" : "+1100", // UTC+11 | |
"PST" : "−0800", // UTC−08 | |
"PST" : "+0800", // UTC+08 | |
"PWT" : "+0900", // UTC+09 | |
"PYST" : "−0300", // UTC−03 | |
"PYT" : "−0400", // UTC−04 | |
"RET" : "+0400", // UTC+04 | |
"ROTT" : "−0300", // UTC−03 | |
"SAKT" : "+1100", // UTC+11 | |
"SAMT" : "+0400", // UTC+04 | |
"SAST" : "+0200", // UTC+02 | |
"SBT" : "+1100", // UTC+11 | |
"SCT" : "+0400", // UTC+04 | |
"SDT" : "−1000", // UTC−10 | |
"SGT" : "+0800", // UTC+08 | |
"SLST" : "+0530", // UTC +05:30 | |
"SRET" : "+1100", // UTC+11 | |
"SRT" : "−0300", // UTC−03 | |
"SST" : "−1100", // UTC−11 | |
"SST" : "+0800", // UTC+08 | |
"SYOT" : "+0300", // UTC+03 | |
"TAHT" : "−1000", // UTC−10 | |
"THA" : "+0700", // UTC+07 | |
"TFT" : "+0500", // UTC+05 | |
"TJT" : "+0500", // UTC+05 | |
"TKT" : "+1300", // UTC+13 | |
"TLT" : "+0900", // UTC+09 | |
"TMT" : "+0500", // UTC+05 | |
"TRT" : "+0300", // UTC+03 | |
"TOT" : "+1300", // UTC+13 | |
"TVT" : "+1200", // UTC+12 | |
"ULAST" : "+0900", // UTC+09 | |
"ULAT" : "+0800", // UTC+08 | |
"UTC" : "+0000", // UTC+00 | |
"UYST" : "−0200", // UTC−02 | |
"UYT" : "−0300", // UTC−03 | |
"UZT" : "+0500", // UTC+05 | |
"VET" : "−0400", // UTC−04 | |
"VLAT" : "+1000", // UTC+10 | |
"VOLT" : "+0400", // UTC+04 | |
"VOST" : "+0600", // UTC+06 | |
"VUT" : "+1100", // UTC+11 | |
"WAKT" : "+1200", // UTC+12 | |
"WAST" : "+0200", // UTC+02 | |
"WAT" : "+0100", // UTC+01 | |
"WEST" : "+0100", // UTC+01 | |
"WET" : "+0000", // UTC+00 | |
"WIB" : "+0700", // UTC+07 | |
"WIT" : "+0900", // UTC+09 | |
"WITA" : "+0800", // UTC+08 | |
"WGST" : "−0200", // UTC−02 | |
"WGT" : "−0300", // UTC−03 | |
"WST" : "+0800", // UTC+08 | |
"YAKT" : "+0900", // UTC+09 | |
"YEKT" : "+0500", // UTC+05 | |
] as [String : Any] | |
static let dateFormats = [ | |
/* | |
IBM Chart | |
Source: https://www.ibm.com/docs/en/spss-statistics/24.0.0?topic=formats-date-time | |
*/ | |
// ------------------------------ | |
"dd-mmm-yy", // 28-OCT-90 | |
"dd-mmm-yyyy", // 28-OCT-1990 | |
"mm/dd/yy", // 10/28/90 | |
"mm/dd/yyyy", // 10/28/1990 | |
"dd.mm.yy", // 28.10.90 | |
"dd.mm.yyyy", // 28.10.1990 | |
"yyddd", // 90301 | |
"yyyyddd", // 1990301 | |
"yy/mm/dd", // 90/10/28 | |
"yyyy/mm/dd", // 1990/10/28 | |
"q Q yy", // 4 Q 90 | |
"q Q yyyy", // 4 Q 1990 | |
"mmm yy", // OCT 90 | |
"mmm yyyy", // OCT 1990 | |
"ww WK yy", // 43 WK 90 | |
"ww WK yyyy", // 43 WK 1990 | |
"hh:mm", // 01:02 | |
"hh:mm:ss.s", // 01:02:34.75 | |
"mm:ss", // 02:34 | |
"mm:ss.s", // 02:34.75 | |
"dd hh:mm", // 20 08:03 | |
"dd hh:mm:ss.s", // 20 08:03:00 | |
"dd-mmm-yyyy hh:mm", // 20-JUN-1990 08:03 | |
"dd-mmm-yyyy hh:mm:ss.s", // 20-JUN-1990 08:03:00 | |
"yyyy-mm-dd hh:mm", // 1990-06-20 08:03 | |
"yyyy-mm-dd hh:mm:ss.s", // 1990-06-20 08:03:00.0 | |
// ------------------------------ | |
/* | |
Stackoverflow forums (@BatyrCan) | |
Source: https://stackoverflow.com/questions/35700281/date-format-in-swift#answer-52297497 | |
*/ | |
// ------------------------------ | |
"EEEE, MMM d, yyyy", // Wednesday, Sep 12, 2018 | |
"MM/dd/yyyy", // 09/12/2018 | |
"MM-dd-yyyy HH:mm", // 09-12-2018 14:11 | |
"MMM d, h:mm a", // Sep 12, 2:11 PM | |
"MMMM yyyy", // September 2018 | |
"MMM d, yyyy", // Sep 1, 2018 | |
"MMM dd, yyyy", // Sep 01, 2018 | |
"E, d MMM yyyy HH:mm:ss Z", // Wed, 1 Sep 2018 14:11:54 +0000 | |
"E, d MMM't' yyyy HH:mm:ss Z", // Wed, 1 Sept 2018 14:11:54 +0000 | |
"E, dd MMM yyyy HH:mm:ss Z", // Wed, 01 Sep 2018 14:11:54 +0000 | |
"yyyy-MM-dd'T'HH:mm:ssZ", // 2018-09-12T14:11:54+0000 | |
"dd.MM.yy", // 12.09.18 | |
"HH:mm:ss.SSS", // 10:41:02.112 | |
// ------------------------------ | |
"yyyy-MM-dd", // 1970-01-01 | |
"EEE, dd MMMM yyyy HH:mm:ss 'PDT'", // Fri, 15 June 2011 17:00:00 PDT | |
"EEE, dd MMMM yyyy HH:mm:ss 'GMT'", // Fri, 15 June 2011 17:00:00 GMT | |
"EEE, dd MMMM yyyy HH:mm:ss 'UTC'", // Fri, 15 June 2011 17:00:00 UTC | |
"EEE, dd MMMM yyyy HH:mm:ss 'PDT'ZZZ", // Fri, 15 June 2011 17:00:00 PDT+0000 | |
"EEE, dd MMMM yyyy HH:mm:ss 'GMT'ZZZ", // Fri, 15 June 2011 17:00:00 GMT+0000 | |
"EEE, dd MMMM yyyy HH:mm:ss 'UTC'ZZZ", // Fri, 15 June 2011 17:00:00 UTC+0000 | |
] | |
static func determineDateFormat(date: String) -> String? | |
{ | |
// DateFormat object | |
let dateFormatter = DateFormatter() | |
dateFormatter.locale = Locale.current | |
dateFormatter.timeZone = TimeZone.current | |
for i in 0..<dateFormats.count | |
{ | |
dateFormatter.dateFormat = dateFormats[i] | |
if dateFormatter.date(from: date) != nil | |
{ | |
return dateFormats[i] | |
} | |
} | |
return nil | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment