diff options
Diffstat (limited to 'Jel/Extensions/JellyfinDateFormatter.swift')
-rw-r--r-- | Jel/Extensions/JellyfinDateFormatter.swift | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Jel/Extensions/JellyfinDateFormatter.swift b/Jel/Extensions/JellyfinDateFormatter.swift new file mode 100644 index 0000000..74b89d1 --- /dev/null +++ b/Jel/Extensions/JellyfinDateFormatter.swift @@ -0,0 +1,33 @@ +// +// JellyfinDateFormatter.swift +// Jel +// +// Created by zerocool on 12/12/23. +// + +import Foundation + +// from: https://stackoverflow.com/a/46458771 +extension Formatter { + static let iso8601withFractionalSeconds: ISO8601DateFormatter = { + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + return formatter + }() + static let iso8601: ISO8601DateFormatter = { + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime] + return formatter + }() +} + +extension JSONDecoder.DateDecodingStrategy { + static let iso8601withFractionalSeconds = custom { + let container = try $0.singleValueContainer() + let string = try container.decode(String.self) + if let date = Formatter.iso8601withFractionalSeconds.date(from: string) ?? Formatter.iso8601.date(from: string) { + return date + } + throw DecodingError.dataCorruptedError(in: container, debugDescription: "Invalid date: \(string)") + } +} |