import Foundation public enum DubaiTime { private static let stampFormatter = LockedDateFormatter(dateFormat: "d MMM yyyy, HH:mm 'Dubai'") private static let fileStampFormatter = LockedDateFormatter(dateFormat: "yyyyMMdd-HHmmss") public static func stamp(_ date: Date) -> String { stampFormatter.string(from: date) } public static func fileStamp(_ date: Date) -> String { fileStampFormatter.string(from: date) } } /// DateFormatter is not Sendable. This holder is the only shared mutable state /// around a formatter: every read is serialized by the lock, so concurrent /// calls (one per PDF page) cannot race. private final class LockedDateFormatter: @unchecked Sendable { private let lock = NSLock() private let formatter: DateFormatter init(dateFormat: String) { let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .gregorian) formatter.locale = Locale(identifier: "en_GB") guard let dubai = TimeZone(identifier: "Asia/Dubai") else { preconditionFailure("The Asia/Dubai time zone is missing from this system.") } formatter.timeZone = dubai formatter.dateFormat = dateFormat self.formatter = formatter } func string(from date: Date) -> String { lock.lock() defer { lock.unlock() } return formatter.string(from: date) } }