Получить текущее местное время в UTC и установить бинарный оператор, например> = или - PullRequest
0 голосов
/ 31 мая 2018

Потерпи меня, я новичок в разработке для iOS;В настоящее время я пытаюсь получить текущее время в UTC на основе местного времени устройства и установить его в операторе if / else на основе текущего времени в UTC.

Я пробовалниже:

let UTCdate = Date()

if (UTCdate >= 13 && UTCdate < 23 {
   // do something
}

Это дает мне ошибку, что "Бинарный оператор"> = "не может быть применен к операндам типа 'Дата' и 'Int'

Я знаю, что делаючто-то не так, просто не знаю что. Извиняюсь, если об этом уже спрашивали. Я старался изо всех сил.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы сказали: «В настоящее время я пытаюсь получить текущее время в UTC на основе местного времени устройства».Кажется, вы не понимаете ключевую вещь в Date объектах в Какао.Date - это мгновение во всем мире в любой точке планеты.Здесь нет часового пояса.Внутренне это представлено как смещение от момента времени, которое выражено в UTC, известное как «дата эпохи», но это деталь реализации.Представьте себе, что когда я снимаю Date с помощью функции вызова Date (), я щелкаю пальцами, и звук щелчка пальцем слышен по всему миру в одно и то же мгновение, даже без задержки со скоростью света.Щелчок пальца - это момент, когда перехватывает вызов Date().

Если я использую код let date = Date(), я фиксирую текущее время по всей планете.У объекта Date нет определенного времени суток, если я не преобразовал его в определенный часовой пояс.Как и предполагали другие, метод Calendar dateComponents(in:from:) позволит вам извлекать такие компоненты, как час в определенном часовом поясе из Date, но вам нужно понять, как все это работает, или вы 'Я запутался.

Я предлагаю поискать фразу «Календарные вычисления» в справочной системе Xcode и прочитать этот раздел документации.Это очень полезно.

0 голосов
/ 31 мая 2018

Вам нужно извлечь час из вашей даты.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!

Опять же, используйте любой часовой пояс, который вам нужен.

...