Установить тип календаря для всего приложения - PullRequest
0 голосов
/ 27 июня 2018

У меня есть приложение, которое работает нормально с типом григорианского календаря. Вся информация API для даты в григорианском календаре. Но если у пользователей есть буддистский календарь, у меня иногда случаются сбои Например:

func days(from date: Date) -> Int {
    let beginningOfDay = date.beginningOfDay ?? date
    return Int(timeIntervalSince1970 - beginningOfDay.timeIntervalSince1970) / Int(TimeInterval.day)
}

Как я могу игнорировать пользовательские настройки для календаря и принудительно указывать дату в григорианском календаре во всем приложении? Возможно ли это?

Я только что основал конвертеры, но я не хочу конвертировать, я просто хочу использовать григорианский календарь для всего приложения.

Спасибо

1 Ответ

0 голосов
/ 27 июня 2018

Похоже, вы добавили много расширений на Date, которые там не принадлежат. Date - это момент времени. Чтобы говорить о «днях», вы должны вызывать методы Calendar и DateComponents. Эта функция в любом случае не совсем корректна. Он может быть выключен на один день в зависимости от изменений летнего времени. Вы не можете предположить, что день длится 24 часа; некоторые - 25 часов, а некоторые - 23 часа.

Код, который вы хотели, был:

let calendar = Calendar(identifier: .gregorian)
calendar.dateComponents([.day], from: d1, to: d2).day!

Вероятно, где-то в ваших расширениях у вас есть Calendar.current. Это означает «текущий пользовательский календарь». Нет никакого способа сказать системе «даже когда я явно запрашиваю текущий пользовательский календарь, пожалуйста, дайте мне что-нибудь еще». Найдите код, который использует Calendar.current и замените его на Calendar(identifier: .gregorian), если вы это имеете в виду.

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