34 lines
1014 B
Swift
34 lines
1014 B
Swift
|
//
|
||
|
// 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)")
|
||
|
}
|
||
|
}
|