Получить текущую дату точно так же в другой версии iOS - PullRequest
0 голосов
/ 10 декабря 2018

в iOS 12.1 Я получаю фактическую дату, используя приведенный ниже код -

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(identifier: "GMT")!
let startDate = dateFormatter.date(from: startDate)
print("the startdate - ",startDate) 
// the startdate -  Optional(2018-12-10 14:58:06 +0000)
let secondsFromGMT = TimeZone.current.secondsFromGMT()
let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT))
print("the date from seconds gmt - ",date) 
// the date from seconds gmt -  2018-12-10 16:10:32 +0000
let seconds = abs(Calendar.current.dateComponents([.second], from: startDate!, to: date).second ?? 0)

, но в iOS 9.1, используя тот же код, я получаю другую дату, как показано ниже

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(identifier: "GMT")!
let startDate = dateFormatter.date(from: startDate)
print("the startdate - ",startDate) 
// the startdate -  Optional(2018-12-10 14:58:06 +0000)
let secondsFromGMT = TimeZone.current.secondsFromGMT() 
// secondsFromGMT is 0
let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT))
print("the date from seconds gmt - ",date) 
// the date from seconds gmt -  2018-12-10 10:44:38 +0000
let seconds = abs(Calendar.current.dateComponents([.second], from: startDate!, to: date).second ?? 0)

Так что, если вы проверите утверждения для печати, я не получаю фактическую текущую дату.Так как же добиться одинаковой даты в обеих версиях без использования каких-либо веб-сервисов?

1 Ответ

0 голосов
/ 11 декабря 2018

Что вы имеете в виду "Дата ()" отличается в 12.1 и 9.1 "?Вы имеете в виду то, как это отображается по-другому?Как вы получаете разные выходные данные от форматера даты в 2 разных версиях ОС?

Отправленный вами код использует дату в тот момент, когда она рассчитывается в строке let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT)).Этот код будет генерировать немного другую дату при каждом запуске.

Выражение Date() дает вам текущую дату в момент запуска кода.Запустите его через 5 секунд, и вы получите дату через 5 секунд.Потратьте время на установку кода на симуляторе, работающем под другой версией ОС, и он даст разные результаты, потому что прошло время.

Вы пытаетесь написать код, который вводит строку даты, преобразует ее вДата объекта, а затем добавляет к нему смещение?Почему ты занимаешься математикой с secondsFromGMT?Это неправильный способ обращения с часовыми поясами.

Объясните, что вы пытаетесь сделать, и мы можем помочь вам написать код, который это делает.Мне кажется, у вас есть фундаментальное недопонимание того, как проводить математику в какао.

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