В чем разница между следующими часовыми поясами в swift

let timeZone = NSTimeZone.system.description
let localTimeZone = TimeZone.ReferenceType.local.description
let currentTimeZone = TimeZone.current.description
let defaultTimeZone = TimeZone.ReferenceType.default.description
let autoUpdateTimezon = TimeZone.autoupdatingCurrent.description

print ("System Timezone \(timeZone)")
print ("Local Timezone \(localTimeZone)")
print ("Current Timezone \(currentTimeZone)")
print ("Default Timezone \(defaultTimeZone)")
print ("Auto updating Timezone \(autoUpdateTimezon)")

ВЫХОД

System Timezone Asia/Kolkata (current)

Local Timezone Asia/Kolkata (autoupdatingCurrent)

Current Timezone Asia/Kolkata (current)

Default Timezone Asia/Kolkata (current)

Auto updating Timezone Asia/Kolkata (autoupdatingCurrent)

Итак, я получаю, что все выходные данные одинаковы, так в чем разница между этими часовыми поясами и какой часовой пояс мы должны использовать в этом случае.

Проблема

Я использовал следующее для кода для преобразования даты

static func stringToString(strDate:String, fromFormat:String, toFormat:String)->String{
        let dateFormatter = DateFormatter()
        dateFormatter.timeZone = TimeZone.init(abbreviation: "UTC") ?? TimeZone(identifier: "UTC") ?? TimeZone.ReferenceType.default
        dateFormatter.dateFormat = fromFormat
        let currentDate = dateFormatter.date(from: strDate) ?? Date()
        dateFormatter.dateFormat =  toFormat
        dateFormatter.timeZone = TimeZone.ReferenceType.default
        let currentDates = dateFormatter.string(from: currentDate)
        return currentDates
    }

Scene : My app is crashing in qatar if user set timezone automatically and off the 24 hours, but in india there is no crash (TimeZone.ReferenceType.local)

I have given next build with TimeZone.ReferenceType.default and issue is solved

So, i cant understand what was the issue.

Отчет о сбое

В чем разница между следующими часовыми поясами в swift

Старый код, в котором я получаю сбой

В чем разница между следующими часовыми поясами в swift

Возможный дубликат NSTimeZone: в чем разница между localTimeZone и systemTimeZone?

Prashant Tukadiya 27.03.2018 07:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
1 377
2

Ответы 2

Местный -> Объект, отслеживающий текущий системный часовой пояс. Используйте это свойство, если хотите, чтобы объект всегда отражал текущий часовой пояс системы. начиная с ios 11, свойство local class отражает текущий часовой пояс системы, тогда как ранее оно отражало часовой пояс по умолчанию.

Система -> Часовой пояс, используемый в настоящее время системой. Если вы обращаетесь к свойству системного класса, его значение кэшируется приложением и не обновляется, если пользователь впоследствии изменяет системный часовой пояс. Чтобы системное свойство отражало новый часовой пояс, необходимо сначала вызвать метод resetSystemTimeZone(), чтобы очистить кэшированное значение.

По умолчанию -> Часовой пояс по умолчанию для текущего приложения. Если часовой пояс по умолчанию не установлен, используется текущий системный часовой пояс. Если текущий часовой пояс системы не может быть определен, вместо него используется часовой пояс GMT. Часовой пояс по умолчанию используется приложением для операций с датой и временем. Вы можете настроить его так, чтобы приложение запускалось, как если бы оно находилось в другом часовом поясе.

Текущий -> Часовой пояс, используемый в настоящее время системой.

автообновление -> Часовой пояс, используемый в настоящее время системой, автоматически обновляется в соответствии с текущими предпочтениями пользователя.

Источник -> https://developer.apple.com/documentation/foundation/nstimezone

Обратите внимание, что TimeZone.ReferenceType - это в основном NSTimeZone.

Если вы посмотрите документы для TimeZone и NSTimeZone, вы узнаете очень быстро.

С NSTimeZone:

The system class property returns the time zone currently used by the system, if known. This value is cached once the property is accessed and doesn't reflect any system time zone changes until you call the resetSystemTimeZone() method. The local class property returns an autoupdating proxy object that always returns the current time zone used by the system.

Подводя итог, system кэшируется, поэтому не изменится, когда пользователь изменит свой часовой пояс. Вы должны вызвать в resetSystemTimeZone, чтобы обновить его. local, с другой стороны, автоматически обновляется, когда пользователь меняет свой часовой пояс.

То же самое и с TimeZone:

TimeZone provides two static functions to get time zone values: current and autoupdatingCurrent. The autoupdatingCurrent time zone automatically tracks updates made by the user.

current соответствует system, а autoupdatingCurrent соответствует local.

поскольку проблема решена, но я не могу воспроизвести проблему в Индии, даже если я изменил часовой пояс своего устройства на Доха-Катар, регион - Катар, но не могу получить сбой в Индии, но в клиенте Катара произойдет сбой, если он отключит 24 часа

Jaydeep Vyas 27.03.2018 08:21

@JaydeepVyas Вы заменили какие на NSTimeZone.default?

Sweeper 27.03.2018 08:23

Сначала я использую TimeZone.ReferenceType.local, затем заменяю его на TimeZone.Reference Type.default

Jaydeep Vyas 27.03.2018 08:39

@JaydeepVyas Часовой пояс default можно установить. Ваше приложение будет работать в этом часовом поясе. Вы его где-нибудь устанавливали? В противном случае он должен быть таким же, как system.

Sweeper 27.03.2018 08:41

да, я знаю это, но мой клиент в Катаре столкнется со сбоем, если он отключит 24-часовой режим в своем телефоне, я тестирую в Индии, даже если я отключил 24 часа. не получить сбой

Jaydeep Vyas 27.03.2018 08:42

но после предоставления ему следующей сборки с часовым поясом по умолчанию проблема решена, поэтому мне интересно, где существует настоящая проблема

Jaydeep Vyas 27.03.2018 08:43

Я конвертирую то же самое с местным часовым поясом, и другие вычисления выполняются на основе этого

Jaydeep Vyas 27.03.2018 08:44

Другие вопросы по теме