Как я могу получить местное время пользователя в Swift? - PullRequest
0 голосов
/ 10 ноября 2018

Я делаю приложение, которое, помимо прочего, определяет закат и восход солнца.Тем не менее, я нашел некоторые трудности, чтобы заставить их использовать местное время пользователя.Поэтому я хотел бы знать: как я могу получить часовой пояс пользователя в Swift?

Координаты моего тестового местоположения (Puerto Vallarta, Mex), который я загружаю в симуляторе iPhone, таковы:

Широта: 20.61 Долгота: -106.23

Следующая часть является частью моего кода для определения восхода и захода солнца в любом месте в мире:

//First we get the sunrise time.
let sunriseDate = Date(timeIntervalSince1970: sunriseValue.doubleValue)
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .medium
formatter.timeZone = NSTimeZone(name: "UTC")! as TimeZone
formatter.dateFormat = "HH:mm:ss"

let sunrise = formatter.string(from: sunriseDate)
print(sunrise)

//Second, we get the sunset time
let sunsetDate = Date(timeIntervalSince1970: sunsetValue.doubleValue)

let sunset = formatter.string(from: sunsetDate)
print(sunset)

И вот чтоЯ получаю из консоли:

Восход: 13:08:12 Закат: 00: 21: 22 * ​​1013 *

Это более чем очевидно, что напечатанные восход и закат соответствуютк UTC, тем не менее, я не нашел никакой прямой информации, которая могла бы помочь мне узнать местное время пользователя, где бы он ни находился.

В основном восход и заход солнца, которые вы видите в приведенном выше коде, я получил егоиз API (openweather), из которого я получил их значения в Unix-времени (который я конвертировал в дату и время, используя эту ссылку . Теперь я вижу, что я получил правильные закаты и восходы, но в формате UTC,нетw Мне не хватает одного шага для перехода от UTC к местному времени.

Итак, в итоге, я получил:

от API: время в unix-времени (например, sunrise = 1541855294;sunset = 1541895681;), извлеките из него время с помощью DateFormatter () (см. код выше), и я получил время UTC (formatter.dateFormat = "ЧЧ: мм: сс").

Я надеюсь, что сВ этой модификации вопрос теперь более ясен.

Вот почему я хотел спросить вас, не могли бы вы помочь мне с этим, пожалуйста:)

Заранее спасибо, и я прошу прощения за любое недопонимание!

1 Ответ

0 голосов
/ 10 ноября 2018

Вы пытались использовать описание метода Date (с локалью: Locale?), Чтобы получить локализованное время пользователя? Это даст вам время устройства

let date = Date().description(with: .current)
    print(date) //Saturday, November 10, 2018 at 11:30:58 AM Central Standard Time

Строковое представление даты с использованием заданной локали или, если аргумент локали равен нулю, в международном формате ГГГГ-ММ-ДД ЧЧ: ММ: СС ± ЧЧММ, где ± ЧЧММ представляет смещение часового пояса в часах и минуты от UTC (например, «2001-03-24 10:45:32 +0600»).

После этого вы можете дать ему любой формат, который вы хотите ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...