This repository has been archived by the owner on Mar 21, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
DayPeriodFormatter.swift
61 lines (49 loc) · 1.88 KB
/
DayPeriodFormatter.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import Foundation
public final class DayPeriodFormatter: Formatter {
@objc public var locale: Locale?
// MARK: -
public override init() {
super.init()
self.locale = nil
}
@objc public func string(from dateComponents: DateComponents) -> String? {
guard let hour = dateComponents.hour,
let minute = dateComponents.minute
else {
return nil
}
let timeOfDay = TimeOfDay(hour: hour, minute: minute)
let locale = self.locale ?? .current
if let languageCode = locale.languageCode,
let ruleSet = DayPeriodFormatter.ruleSetsByLanguageCode[languageCode],
let period = ruleSet.period(for: timeOfDay) {
return string(for: period, languageCode: languageCode)
}
return nil
}
@objc public func string(from date: Date, in calendar: Calendar = .current) -> String? {
return string(from: calendar.dateComponents([.hour, .minute], from: date))
}
// MARK: Formatter
public override func string(for object: Any?) -> String? {
switch object {
case let dateComponents as DateComponents:
return string(from: dateComponents)
case let date as Date:
return string(from: date)
case let timeZone as TimeZone:
let dateComponents = Calendar.current.dateComponents(in: timeZone, from: Date())
return string(from: dateComponents)
default:
return nil
}
}
public override func getObjectValue(_: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for _: String, errorDescription _: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
return false
}
// MARK: NSCoding
public required init?(coder: NSCoder) {
super.init(coder: coder)
self.locale = coder.decodeObject(forKey: #keyPath(locale)) as? Locale
}
}