Il semble que la méthode setDefaultTimeZone
ne soit plus disponible dans NSTimeZone
. Est-ce que quelqu'un connaît un substitut pour cela?
Ajout de quelques détails: Dans mon appDelegate.Swift, j'ai
NSTimeZone.default = TimeZone(abbreviation: "BST")!
et cela fonctionne comme prévu, je suppose, car dans tous les autres fichiers, NSTimeZone est défini sur cette valeur
Maintenant, dans mes utils, j'ai cette méthode
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
}
Alors, disons, je lui donne l'entrée "2016-10-07", il me redonne 2016-10-06 23:00. Pourquoi? Il est corrigé si vous décommentez la ligne dans le code ci-dessus. Je ne veux pas utiliser cette ligne partout.
Par exemple, j'ai utilisé CVCalendar ( https://github.com/Mozharovsky/CVCalendar ) dans une autre partie de mon projet. Il fournit une fonction pour se convertirDate comme si
func didSelectDayView(_ dayView: DayView, animationDidFinish: Bool) {
selectedDay = dayView
selectedDate = dayView.date.convertedDate()!
}
La même chose que précédemment se passe ici aussi ... c’est-à-dire que je clique sur 2016-10-08 et que cette date est sélectionnéeDate ici devient 2016-10-07 23:00.
Et NSTimeZone.Default imprime l’Europe/Londres partout.
Quelqu'un a-t-il une idée de la raison pour laquelle cela se produit?
let locale = NSTimeZone.init(abbreviation: "BST")
NSTimeZone.default = locale as! TimeZone
Essaye ça
Essayez comme ça.
TimeZone.ReferenceType.default = TimeZone(abbreviation: "BST")!
Edit: / J'ai utilisé cette TimeZone
avec DateFormatter
et obtenir l'heure BST
correcte avec la date.
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)
Si vous voulez définir defaultTimeZone
pour un objet NSTimeZone
, vous pouvez le définir comme suit dans Swift 3.
NSTimeZone.default = TimeZone(abbreviation: "BST")!
Si vous utilisez le calendrier alors,
// * créer un objet de calendrier *
var calendar = NSCalendar.current
// * définir les composants du calendrier à utiliser également Timezone to 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)
Identificateur de région géopolitique identifiant le fuseau horaire.
identifiant de la variable publique: String {get}
Remarque : Si vous souhaitez définir le fuseau horaire du formateur de date, vous pouvez suivre l'approche ci-dessus comme suit:
dateFormatter.timeZone = TimeZone(identifier: "UTC")!