feat: added named time zones (thx #2447)

This commit is contained in:
Serhiy Mytrovtsiy
2025-06-24 18:22:48 +02:00
parent 4a3ebe0e61
commit 89e7ad1c63
5 changed files with 19 additions and 10 deletions

View File

@@ -550,13 +550,18 @@ public extension Date {
}
public extension TimeZone {
init(fromUTC: String) {
if fromUTC == "local" {
init(from: String) {
if let tz = TimeZone(identifier: from) {
self = tz
return
}
if from == "local" {
self = TimeZone.current
return
}
let arr = fromUTC.split(separator: ":")
let arr = from.split(separator: ":")
guard !arr.isEmpty else {
self = TimeZone.current
return

View File

@@ -42,7 +42,7 @@ public struct Clock_t: Codable {
public func formatted() -> String {
let formatter = DateFormatter()
formatter.dateFormat = self.format
formatter.timeZone = TimeZone(fromUTC: self.tz)
formatter.timeZone = TimeZone(from: self.tz)
return formatter.string(from: self.value ?? Date())
}
}
@@ -159,7 +159,8 @@ extension Clock {
KeyValue_t(key: "11", value: "UTC+11:00"),
KeyValue_t(key: "12", value: "UTC+12:00"),
KeyValue_t(key: "13", value: "UTC+13:00"),
KeyValue_t(key: "14", value: "UTC+14:00")
]
KeyValue_t(key: "14", value: "UTC+14:00"),
KeyValue_t(key: "separator", value: "separator")
] + TimeZone.knownTimeZoneIdentifiers.map { KeyValue_t(key: $0, value: $0) }
}
}

View File

@@ -499,7 +499,7 @@ private class ClockView: NSStackView {
if (self.window?.isVisible ?? false) || !self.ready {
self.timeField.stringValue = newClock.formatted()
if let value = newClock.value {
self.clockView.setValue(value.convertToTimeZone(TimeZone(fromUTC: newClock.tz)))
self.clockView.setValue(value.convertToTimeZone(TimeZone(from: newClock.tz)))
}
self.ready = true
}

View File

@@ -80,7 +80,7 @@ public class Portal: NSStackView, Portal_p {
let views = self.oneContainer.subviews.compactMap{ $0 as? ClockChart }
if let view = views.first(where: { $0.identifier?.rawValue == clock.id }) {
if let value = clock.value {
view.setValue(value.convertToTimeZone(TimeZone(fromUTC: clock.tz)))
view.setValue(value.convertToTimeZone(TimeZone(from: clock.tz)))
}
} else {
self.oneContainer.addRow(with: [self.clockView(clock)])
@@ -102,7 +102,7 @@ public class Portal: NSStackView, Portal_p {
sorted.forEach { (c: Clock_t) in
if let view = views.first(where: { $0.identifier?.rawValue == c.id }) {
if let value = c.value {
view.setValue(value.convertToTimeZone(TimeZone(fromUTC: c.tz)))
view.setValue(value.convertToTimeZone(TimeZone(from: c.tz)))
}
} else {
self.multiplyContainer.stackView.addArrangedSubview(clockView(c))
@@ -117,7 +117,7 @@ public class Portal: NSStackView, Portal_p {
view.identifier = NSUserInterfaceItemIdentifier(clock.id)
if let value = clock.value {
view.setValue(value.convertToTimeZone(TimeZone(fromUTC: clock.tz)))
view.setValue(value.convertToTimeZone(TimeZone(from: clock.tz)))
}
return view

View File

@@ -204,6 +204,9 @@ internal class Settings: NSStackView, Settings_v, NSTableViewDelegate, NSTableVi
let select: NSPopUpButton = selectView(action: #selector(self.toggleTZ), items: Clock.zones, selected: item.tz)
select.identifier = NSUserInterfaceItemIdentifier("\(row)")
select.sizeToFit()
select.preferredEdge = .maxX
select.translatesAutoresizingMaskIntoConstraints = false
select.widthAnchor.constraint(lessThanOrEqualToConstant: 132).isActive = true
cell.addSubview(select)
case statusColumnID:
let button: NSButton = NSButton(frame: NSRect(x: 0, y: 5, width: 10, height: 10))