Reduced code duplication from String.swiftyTime() method

This commit is contained in:
Caleb Kleveter 2018-05-24 17:28:37 -05:00
parent d1cea81e8a
commit 3aff29de7f
No known key found for this signature in database
GPG Key ID: B38DBD5CF2C98D69
1 changed files with 12 additions and 31 deletions

View File

@ -13,45 +13,29 @@ extension String {
var hour: Double = 0 var hour: Double = 0
var minute: Double = 0 var minute: Double = 0
var second: Double = 0 var second: Double = 0
var pm: Bool = false let pm: Bool = self.contains("pm")
var offset: Double = 0 var offset: Double = 0
if (contains("pm")) {
pm = true
}
var cleanedTime = replacingOccurrences(of: "am", with: "").replacingOccurrences(of: "pm", with: "").replacingOccurrences(of: " ", with: "").replacingOccurrences(of: "Z", with: "") var cleanedTime = replacingOccurrences(of: "am", with: "").replacingOccurrences(of: "pm", with: "").replacingOccurrences(of: " ", with: "").replacingOccurrences(of: "Z", with: "")
var sep: Character = ":" let sep: Character = self.contains(".") && !self.contains(":") ? "." : ":"
if (contains(".") && !contains(":")) {
sep = "." if (self.contains("-") || self.contains("+")) {
} let sign: Double = self.contains("-") ? -1 : 1
if (contains("+")) {
let timeParts:[String] = split(separator: "+").map { String($0) } let timeParts:[String] = split(separator: sign == 1 ? "+" : "-").map(String.init)
cleanedTime = timeParts[0] cleanedTime = timeParts[0]
if (timeParts[1].contains(":")) { if (timeParts[1].contains(":")) {
let intervalParts = timeParts[1].split(separator: ":").map { Double($0)! } let intervalParts = timeParts[1].split(separator: ":").compactMap(Double.init)
offset = intervalParts[0]*3600 + intervalParts[1]*60 offset = sign * (intervalParts[0]*3600 + intervalParts[1]*60)
if (intervalParts.count > 2) { if (intervalParts.count > 2) {
offset = offset + intervalParts[2] offset = offset + intervalParts[2]
} }
} }
else { else {
offset = Double(timeParts[1])! offset = (Double(timeParts[1]) ?? 0) * sign
} }
} }
if (contains("-")) { let parts:[Double] = cleanedTime.split(separator: sep).compactMap(Double.init)
let timeParts:[String] = split(separator: "-").map { String($0)}
cleanedTime = timeParts[0]
if (timeParts[1].contains(":")) {
let intervalParts = timeParts[1].split(separator: ":").map { Double($0)!}
offset = 0 - intervalParts[0]*3600 - intervalParts[1]*60
if (intervalParts.count > 2) {
offset = offset + intervalParts[2]
}
}
else {
offset = Double(timeParts[1])! * -1
}
}
let parts:[Double] = cleanedTime.split(separator: sep).map { Double($0)!}
if (parts.count > 0) { if (parts.count > 0) {
hour = parts[0] hour = parts[0]
} }
@ -61,9 +45,6 @@ extension String {
if (parts.count > 2) { if (parts.count > 2) {
second = parts[2] second = parts[2]
} }
if (parts.count > 3) {
second = parts[2]
}
if (pm) { if (pm) {
hour = hour + 12 hour = hour + 12
} }