Ответ 1
let locale = NSTimeZone.init(abbreviation: "BST")
NSTimeZone.default = locale as! TimeZone
Попробуйте это
Кажется, метод setDefaultTimeZone
больше не доступен в NSTimeZone
. Кто-нибудь знает заменитель этого?
В моем AppDelegate.swift
у меня есть:
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
. Он предоставляет функцию для получения convertDate, например, так
func didSelectDayView(_ dayView: DayView, animationDidFinish: Bool) {
selectedDay = dayView
selectedDate = dayView.date.convertedDate()!
}
Здесь происходит то же самое, что и раньше... то есть я нажимаю 2016-10-08
, и он selectedDate
здесь становится 2016-10-07 23:00
.
И NSTimeZone.Default
печатает Europe/London
везде.
У кого-нибудь есть идеи, почему это происходит?
let locale = NSTimeZone.init(abbreviation: "BST")
NSTimeZone.default = locale as! TimeZone
Попробуйте это
Попробуйте это.
TimeZone.ReferenceType.default = TimeZone(abbreviation: "BST")!
Изменить: Я использовал этот 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)
Идентификатор геополитической области, который идентифицирует часовой пояс.
public var идентификатор: String {get}
Примечание. Если вы хотите установить часовой пояс форматирования даты, вы можете выполнить описанный выше подход следующим образом:
dateFormatter.timeZone = TimeZone(identifier: "UTC")!