@@ -82,7 +82,10 @@ open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding {
82
82
// Time zones created with this never have daylight savings and the
83
83
// offset is constant no matter the date; the name and abbreviation
84
84
// do NOT follow the POSIX convention (of minutes-west).
85
- public convenience init ( forSecondsFromGMT seconds: Int ) { NSUnimplemented ( ) }
85
+ public init ( forSecondsFromGMT seconds: Int ) {
86
+ super. init ( )
87
+ _CFTimeZoneInitWithTimeIntervalFromGMT ( _cfObject, CFTimeInterval ( seconds) )
88
+ }
86
89
87
90
public convenience init ? ( abbreviation: String ) {
88
91
let abbr = abbreviation. _cfObject
@@ -165,58 +168,52 @@ open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding {
165
168
166
169
extension NSTimeZone {
167
170
168
- open class func systemTimeZone ( ) -> TimeZone {
171
+ open class var system : TimeZone {
169
172
return CFTimeZoneCopySystem ( ) . _swiftObject
170
173
}
171
174
172
175
open class func resetSystemTimeZone( ) {
173
176
CFTimeZoneResetSystem ( )
177
+ NotificationCenter . default. post ( name: NSNotification . Name. NSSystemTimeZoneDidChange, object: nil )
174
178
}
175
179
176
- open class func defaultTimeZone( ) -> TimeZone {
177
- return CFTimeZoneCopyDefault ( ) . _swiftObject
178
- }
179
-
180
- open class func setDefaultTimeZone( _ aTimeZone: TimeZone ) {
181
- CFTimeZoneSetDefault ( aTimeZone. _cfObject)
180
+ open class var `default` : TimeZone {
181
+ get {
182
+ return CFTimeZoneCopyDefault ( ) . _swiftObject
183
+ }
184
+ set {
185
+ CFTimeZoneSetDefault ( newValue. _cfObject)
186
+ NotificationCenter . default. post ( name: NSNotification . Name. NSSystemTimeZoneDidChange, object: nil )
187
+ }
182
188
}
183
- }
184
189
185
- extension NSTimeZone : _SwiftBridgable , _CFBridgable {
186
- typealias SwiftType = TimeZone
187
- var _swiftObject : TimeZone { return TimeZone ( reference: self ) }
188
- }
190
+ open class var local : TimeZone { NSUnimplemented ( ) }
189
191
190
- extension CFTimeZone : _SwiftBridgable , _NSBridgable {
191
- typealias NSType = NSTimeZone
192
- var _nsObject : NSTimeZone { return unsafeBitCast ( self , to: NSTimeZone . self) }
193
- var _swiftObject : TimeZone { return _nsObject. _swiftObject }
194
- }
195
-
196
- extension TimeZone : _NSBridgable , _CFBridgable {
197
- typealias NSType = NSTimeZone
198
- typealias CFType = CFTimeZone
199
- var _nsObject : NSTimeZone { return _bridgeToObjectiveC ( ) }
200
- var _cfObject : CFTimeZone { return _nsObject. _cfObject }
201
- }
192
+ open class var knownTimeZoneNames : [ String ] {
193
+ guard let knownNames = CFTimeZoneCopyKnownNames ( ) else { return [ ] }
194
+ return knownNames. _swiftObject. map { ( $0 as! NSString ) . _swiftObject }
195
+ }
202
196
203
- extension NSTimeZone {
204
- open class func localTimeZone( ) -> TimeZone { NSUnimplemented ( ) }
205
-
206
- open class var knownTimeZoneNames : [ String ] { NSUnimplemented ( ) }
207
-
208
197
open class var abbreviationDictionary : [ String : String ] {
209
198
get {
210
- NSUnimplemented ( )
199
+ guard let dictionary = CFTimeZoneCopyAbbreviationDictionary ( ) else { return [ : ] }
200
+ var result = [ String : String] ( )
201
+ dictionary. _swiftObject. forEach {
202
+ result [ ( $0 as! NSString ) . _swiftObject] = ( $1 as! NSString ) . _swiftObject
203
+ }
204
+ return result
211
205
}
212
206
set {
213
- NSUnimplemented ( )
207
+ CFTimeZoneSetAbbreviationDictionary ( newValue . _cfObject )
214
208
}
215
209
}
216
-
210
+
217
211
open class var timeZoneDataVersion : String { NSUnimplemented ( ) }
218
-
219
- open var secondsFromGMT : Int { NSUnimplemented ( ) }
212
+
213
+ open var secondsFromGMT : Int {
214
+ let currentDate = Date ( )
215
+ return secondsFromGMT ( for: currentDate)
216
+ }
220
217
221
218
/// The abbreviation for the receiver, such as "EDT" (Eastern Daylight Time). (read-only)
222
219
///
@@ -226,15 +223,52 @@ extension NSTimeZone {
226
223
return abbreviation ( for: currentDate)
227
224
}
228
225
229
- open var daylightSavingTime : Bool { NSUnimplemented ( ) }
230
- open var daylightSavingTimeOffset : TimeInterval { NSUnimplemented ( ) }
231
- /*@NSCopying*/ open var nextDaylightSavingTimeTransition : Date ? { NSUnimplemented ( ) }
232
-
226
+ open var isDaylightSavingTime : Bool {
227
+ let currentDate = Date ( )
228
+ return isDaylightSavingTime ( for: currentDate)
229
+ }
230
+
231
+ open var daylightSavingTimeOffset : TimeInterval {
232
+ let currentDate = Date ( )
233
+ return daylightSavingTimeOffset ( for: currentDate)
234
+ }
235
+
236
+ /*@NSCopying*/ open var nextDaylightSavingTimeTransition : Date ? {
237
+ let currentDate = Date ( )
238
+ return nextDaylightSavingTimeTransition ( after: currentDate)
239
+ }
240
+
233
241
open func isEqual( to aTimeZone: TimeZone ) -> Bool {
234
242
return CFEqual ( self . _cfObject, aTimeZone. _cfObject)
235
243
}
236
-
237
- open func localizedName( _ style: NameStyle , locale: Locale ? ) -> String ? { NSUnimplemented ( ) }
244
+
245
+ open func localizedName( _ style: NameStyle , locale: Locale ? ) -> String ? {
246
+ #if os(OSX) || os(iOS)
247
+ let cfStyle = CFTimeZoneNameStyle ( rawValue: style. rawValue) !
248
+ #else
249
+ let cfStyle = CFTimeZoneNameStyle ( style. rawValue)
250
+ #endif
251
+ return CFTimeZoneCopyLocalizedName ( self . _cfObject, cfStyle, locale? . _cfObject) . _swiftObject
252
+ }
253
+
254
+ }
255
+
256
+ extension NSTimeZone : _SwiftBridgable , _CFBridgable {
257
+ typealias SwiftType = TimeZone
258
+ var _swiftObject : TimeZone { return TimeZone ( reference: self ) }
259
+ }
260
+
261
+ extension CFTimeZone : _SwiftBridgable , _NSBridgable {
262
+ typealias NSType = NSTimeZone
263
+ var _nsObject : NSTimeZone { return unsafeBitCast ( self , to: NSTimeZone . self) }
264
+ var _swiftObject : TimeZone { return _nsObject. _swiftObject }
265
+ }
266
+
267
+ extension TimeZone : _NSBridgable , _CFBridgable {
268
+ typealias NSType = NSTimeZone
269
+ typealias CFType = CFTimeZone
270
+ var _nsObject : NSTimeZone { return _bridgeToObjectiveC ( ) }
271
+ var _cfObject : CFTimeZone { return _nsObject. _cfObject }
238
272
}
239
273
240
274
extension NSTimeZone {
@@ -249,3 +283,7 @@ extension NSTimeZone {
249
283
}
250
284
251
285
}
286
+
287
+ extension NSNotification . Name {
288
+ public static let NSSystemTimeZoneDidChange = NSNotification . Name ( rawValue: " NSSystemTimeZoneDidChangeNotification " )
289
+ }
0 commit comments