Проблема часового пояса Swift 3

кажется setDefaultTimeZone способ больше не доступен в NSTimeZone. Кто-нибудь знает замену этому?

добавление некоторых деталей: В моем appDelegate.Свифт, У меня есть!--6-->

        NSTimeZone.default = TimeZone(abbreviation: "BST")!

и он работает по назначению, я думаю, потому что во всех других файлах я получаю NSTimeZone, установленный на это значение

теперь, в моих Utils, у меня есть этот метод

static func getDate(_ dateStr: String) -> Date {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    // dateFormatter.timeZone = TimeZone(abbreviation: "GMT")
    let date =  dateFormatter.date(from: dateStr)!
    return date
}

Итак, скажем, я даю ему вход "2016-10-07", он возвращает мне 2016-10-06 23:00. Почему? Ее если вы раскомментируйте строку в приведенном выше коде. Я не хочу использовать эту линию везде.

например, в какой-то другой части моего проекта я использовал CVCalendar (https://github.com/Mozharovsky/CVCalendar). Он предоставляет функцию для получения convertedDate, как так

func didSelectDayView(_ dayView: DayView, animationDidFinish: Bool) {
    selectedDay = dayView
    selectedDate = dayView.date.convertedDate()!
}

то же самое, что и раньше, происходит и здесь...то есть я нажимаю на 2016-10-08, и он selectedDate здесь становится 2016-10-07 23: 00.

и NSTimeZone.Печать по умолчанию Европа / Лондон повсюду.

кто-нибудь знает, почему это происходит?

3 ответов


let locale = NSTimeZone.init(abbreviation: "BST")
NSTimeZone.default = locale as! TimeZone

попробуй такое


попробуйте вот так.

TimeZone.ReferenceType.default = TimeZone(abbreviation: "BST")!

Edit: я использовал этот TimeZone С DateFormatter и сделать правильный BST время с дата.

TimeZone.ReferenceType.default = TimeZone(abbreviation: "BST")!
let formatter = DateFormatter()
formatter.timeZone = TimeZone.ReferenceType.default
formatter.dateFormat = "yyyy-MM-dd HH:mm"
let strDate = formatter.string(from: Date())
print(strDate)

если вы хотите установить defaultTimeZone на NSTimeZone объект в Swift 3 Вы можете установить такой.

NSTimeZone.default = TimeZone(abbreviation: "BST")!

если вы используете календарь, то,

// * создать объект календаря*

var calendar = NSCalendar.current

// * определите компоненты календаря для использования, а также часовой пояс в UTC*

let unitFlags = Set<Calendar.Component>([.hour, .year, .minute])
calendar.timeZone = TimeZone(identifier: "UTC")!
/// Returns a time zone initialized with a given identifier.
///
/// An example identifier is "America/Los_Angeles".
///
/// If `identifier` is an unknown identifier, then returns `nil`.
public init?(identifier: String)

идентификатор геополитического региона, определяющий часовой пояс.

открытый идентификатор var: строка { get }

Примечание : если вы хотите установить часовой пояс форматирования даты, вы можете следуйте приведенному выше подходу следующим образом:

dateFormatter.timeZone = TimeZone(identifier: "UTC")!