setDefaultTimeZone
メソッドはNSTimeZone
で使用できなくなったようです。誰かがこれの代わりを知っていますか?
私のAppDelegate.Swift
、 私が持っています:
NSTimeZone.default = TimeZone(abbreviation: "BST")!
他のすべてのファイルでは、NSTimeZone
がこの値に設定されるため、意図したとおりに動作します
今、私のユーティリティでは、このメソッドがあります:
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
を使用しています。変換された日付を取得するための関数を提供します
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 identifier:String {get}
注:日付フォーマッターのタイムゾーンを設定する場合は、上記のアプローチを次のように実行できます。
dateFormatter.timeZone = TimeZone(identifier: "UTC")!