Вам нужно извлечь час из вашей даты.Date
- это отметка времени, а не час.И вам нужно убедиться, что вы извлекаете час из часового пояса UTC, а не из локали.
Следующее будет делать то, что вам нужно:
// Create a calendar with the UTC timezone
var utcCal = Calendar(identifier: Calendar.current.identifier) // or hardcode .gregorian if appropriate
utcCal.timeZone = TimeZone(secondsFromGMT: 0)!
// The current date
let date = Date()
// Get the hour (it will be UTC hour)
let hour = utcCal.component(.hour, from: date)
if hour >= 13 && hour < 23 {
}
Если вы просто используете текущий календарь длядополнительно от date
вы получите час по местному времени.По этой причине мы создали новый календарь специально для часового пояса UTC (поскольку это ваше требование).
На основании некоторых комментариев вы, возможно, не захотите использовать UTC.Просто установите timeZone
в любой часовой пояс, который вам действительно нужен.
Если вы хотите чикагское время, используйте:
utcCal.timeZone = TimeZone(identifier: "America/Chicago")!
И альтернативой для создания собственного экземпляра календаря является использование:
let hour = Calendar.current.dateComponents(in: TimeZone(secondsFromGMT: 0)!, from: date).hour!
Опять же, используйте любой часовой пояс, который вам нужен.