Skip to content

Instantly share code, notes, and snippets.

@KatharinaGopp
Created August 23, 2022 10:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KatharinaGopp/7dac4c660860b9b4130631c032bb8268 to your computer and use it in GitHub Desktop.
Save KatharinaGopp/7dac4c660860b9b4130631c032bb8268 to your computer and use it in GitHub Desktop.
Timezone Shenanigans
import Foundation
let date1 = Date(timeIntervalSince1970: 0) // 1970-01-01 00:00:00
let date2 = Date(timeIntervalSince1970: 60 * 60 * 24)// 1970-01-02 00:00:00
func compareDates(date1: Date, date2: Date){
switch date1 {
case date2:
print("date1 and date2 represent the same point in time")
case ...date2:
print("date1 is earlier in time than date2")
case date2...:
print("date1 is later in time than date2")
default:
return
}
}
compareDates(date1: date1, date2: date2)
func startOfDayIn(date: Date, timeZone: TimeZone) -> Date {
var calendar = Calendar.current
calendar.timeZone = timeZone
return calendar.startOfDay(for: date)
}
let date = Date(timeIntervalSince1970: 60 * 60 * 24 * 365) // 1971-01-01 00:00:00
let timeZone1 = TimeZone(secondsFromGMT: 60 * 60 * 1)! // Berlin
let start1 = startOfDayIn(date: date, timeZone: timeZone1)
let timeZone2 = TimeZone(secondsFromGMT: 60 * 60 * -8)! // New York City
let start2 = startOfDayIn(date: date, timeZone: timeZone2)
compareDates(date1: start1, date2: start2)
(-12...12).reversed().forEach { deviation in
let timeZone = TimeZone(secondsFromGMT: 60 * 60 * deviation)!
let start = startOfDayIn(date: date, timeZone: timeZone)
print(start, "| UTC\(deviation >= 0 ? "+" : "")\(deviation)")
}
func adjustedStartOfDayIn(date: Date, timeZone: TimeZone) -> Date {
var calendar = Calendar.current
calendar.timeZone = timeZone
let correctDay = date.addingTimeInterval(TimeInterval(-timeZone.secondsFromGMT()))
return calendar.startOfDay(for: correctDay)
}
let correctStart1 = adjustedStartOfDayIn(date: date, timeZone: timeZone1)
let correctStart2 = adjustedStartOfDayIn(date: date, timeZone: timeZone2)
compareDates(date1: correctStart1, date2: correctStart2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment