import Foundation
let f = ISO8601DateFormatter(); f.timeZone = TimeZone.current; f.formatOptions = [.withInternetDateTime]
let cal = Calendar.current
func show(_ d: Date?) -> String { d.map { f.string(from: $0) } ?? "nil" }
let args = CommandLine.arguments
// args: <isoLocalDayInstant> <hour> <minute>
let base = ISO8601DateFormatter().date(from: args[1])!
let h = Int(args[2])!, m = Int(args[3])!
print("tz", TimeZone.current.identifier, "base", show(base))
print("startOfDay", show(cal.startOfDay(for: base)))
print("bySettingHour", show(cal.date(bySettingHour: h, minute: m, second: 0, of: base)))
print("nextDate.nextTime from startOfDay", show(cal.nextDate(after: cal.startOfDay(for: base).addingTimeInterval(-1), matching: DateComponents(hour: h, minute: m), matchingPolicy: .nextTime)))
