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.defaultand issue is solvedSo, i cant understand what was the issue.
Отчет о сбое
Старый код, в котором я получаю сбой





Местный -> Объект, отслеживающий текущий системный часовой пояс. Используйте это свойство, если хотите, чтобы объект всегда отражал текущий часовой пояс системы. начиная с ios 11, свойство local class отражает текущий часовой пояс системы, тогда как ранее оно отражало часовой пояс по умолчанию.
Система -> Часовой пояс, используемый в настоящее время системой. Если вы обращаетесь к свойству системного класса, его значение кэшируется приложением и не обновляется, если пользователь впоследствии изменяет системный часовой пояс. Чтобы системное свойство отражало новый часовой пояс, необходимо сначала вызвать метод resetSystemTimeZone(), чтобы очистить кэшированное значение.
По умолчанию -> Часовой пояс по умолчанию для текущего приложения. Если часовой пояс по умолчанию не установлен, используется текущий системный часовой пояс. Если текущий часовой пояс системы не может быть определен, вместо него используется часовой пояс GMT. Часовой пояс по умолчанию используется приложением для операций с датой и временем. Вы можете настроить его так, чтобы приложение запускалось, как если бы оно находилось в другом часовом поясе.
Текущий -> Часовой пояс, используемый в настоящее время системой.
автообновление -> Часовой пояс, используемый в настоящее время системой, автоматически обновляется в соответствии с текущими предпочтениями пользователя.
Источник -> https://developer.apple.com/documentation/foundation/nstimezone
Обратите внимание, что TimeZone.ReferenceType - это в основном NSTimeZone.
Если вы посмотрите документы для TimeZone и NSTimeZone, вы узнаете очень быстро.
С NSTimeZone:
The
systemclass 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 theresetSystemTimeZone()method. Thelocalclass 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:
currentandautoupdatingCurrent. TheautoupdatingCurrenttime zone automatically tracks updates made by the user.
current соответствует system, а autoupdatingCurrent соответствует local.
поскольку проблема решена, но я не могу воспроизвести проблему в Индии, даже если я изменил часовой пояс своего устройства на Доха-Катар, регион - Катар, но не могу получить сбой в Индии, но в клиенте Катара произойдет сбой, если он отключит 24 часа
@JaydeepVyas Вы заменили какие на NSTimeZone.default?
Сначала я использую TimeZone.ReferenceType.local, затем заменяю его на TimeZone.Reference Type.default
@JaydeepVyas Часовой пояс default можно установить. Ваше приложение будет работать в этом часовом поясе. Вы его где-нибудь устанавливали? В противном случае он должен быть таким же, как system.
да, я знаю это, но мой клиент в Катаре столкнется со сбоем, если он отключит 24-часовой режим в своем телефоне, я тестирую в Индии, даже если я отключил 24 часа. не получить сбой
но после предоставления ему следующей сборки с часовым поясом по умолчанию проблема решена, поэтому мне интересно, где существует настоящая проблема
Я конвертирую то же самое с местным часовым поясом, и другие вычисления выполняются на основе этого
Возможный дубликат NSTimeZone: в чем разница между localTimeZone и systemTimeZone?