Je viens de commencer avec la cour de récréation. J'essaie de créer une application simple.
J'ai créé un objet de date comme ceci:
var date = NSDate()
Comment puis-je obtenir l'heure actuelle? Dans d'autres langues, je peux faire quelque chose comme ça:
var hour = date.hour
Mais je ne trouve pas de propriétés/méthodes comme ça. J'ai trouvé une méthode, dateWithCalendarFormat
. Dois-je l'utiliser? Si c'est le cas, comment?
Mise à jour pour Swift 3:
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
Je fais ça:
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute
Voir la même question dans objective-c Comment obtenir des heures et des minutes de NSDate?
Comparé à la réponse de Nate, vous obtiendrez des chiffres avec celle-ci, pas des chaînes de caractères… choisissez votre choix!
Testé avec Swift 4
Vous pouvez obtenir la date et l'heure actuelles aussi simplement que ceci:
let currentDateTime = Date()
Cependant, Date
est un nombre à virgule flottante de 64 bits mesurant le nombre de secondes écoulées depuis la date de référence du 1er janvier 2001 à 00:00:00 UTC . Je peux voir ce nombre pour la date et l'heure en utilisant
Date().timeIntervalSinceReferenceDate
Au moment d'écrire ces lignes, il renvoyait 497626515.185066
, probablement pas exactement ce que vous recherchez. Continue de lire.
Méthode 1
Si vous connaissez le nombre de secondes avant ou après la date de référence, vous pouvez l'utiliser.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Méthode 2
Bien sûr, il serait plus facile d’utiliser des éléments tels que des années, des mois, des jours et des heures (plutôt que des secondes relatives) pour créer un Date
. Pour cela, vous pouvez utiliser DateComponents
pour spécifier les composants, puis Calendar
pour créer la date. La Calendar
donne le contexte Date
. Sinon, comment pourrait-il savoir dans quel fuseau horaire ou dans quel calendrier l'exprimer?
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11
dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time
dateComponents.hour = 8
dateComponents.minute = 34
// Create date from components
let userCalendar = Calendar.current // user calendar
let someDateTime = userCalendar.date(from: dateComponents)
D'autres abréviations de fuseaux horaires peuvent être trouvées ici . Si vous laissez ce champ vide, le fuseau horaire de l'utilisateur est utilisé par défaut.
Méthode 3
La manière la plus succincte (mais pas nécessairement la meilleure) pourrait être d’utiliser DateFormatter
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Les normes techniques Unicode indiquent d’autres formats pris en charge par DateFormatter
.
Méthode 1
Si vous souhaitez uniquement afficher certains composants de la date ou de l'heure, vous pouvez utiliser CalendarUnit
pour spécifier les composants à extraire de Date
.
// get the current date and time
let currentDateTime = Date()
// get the user's calendar
let userCalendar = Calendar.current
// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second
]
// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)
// now the components are available
dateTimeComponents.year // 2016
dateTimeComponents.month // 10
dateTimeComponents.day // 8
dateTimeComponents.hour // 22
dateTimeComponents.minute // 42
dateTimeComponents.second // 17
Voir cette réponse aussi.
Méthode 2
La méthode 1 vous a donné les composants, mais il vous faudrait beaucoup de travail pour formater ces nombres pour chaque style, langue et région. Et tu n'as pas besoin. Cela a déjà été fait pour vous avec la classe DateFormatter
.
// get the current date and time
let currentDateTime = Date()
// initialize the date formatter and set the style
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
// get the date time String from the date object
formatter.string(from: currentDateTime) // October 8, 2016 at 10:48:53 PM
Voici une suite du code ci-dessus qui montre plus d'options de formatage:
// "10/8/16, 10:52 PM"
formatter.timeStyle = .short
formatter.dateStyle = .short
formatter.string(from: currentDateTime)
// "Oct 8, 2016, 10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .medium
formatter.string(from: currentDateTime)
// "October 8, 2016 at 10:52:30 PM GMT+8"
formatter.timeStyle = .long
formatter.dateStyle = .long
formatter.string(from: currentDateTime)
// "October 8, 2016"
formatter.timeStyle = .none
formatter.dateStyle = .long
formatter.string(from: currentDateTime)
// "10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .none
formatter.string(from: currentDateTime)
Gardez cependant à l’esprit que c’est pour l’anglais avec la région située aux États-Unis. Pour les autres langues et régions, le formatage sera différent.
Vous pouvez également utiliser la méthode pratique de NSDateFormatter, par exemple,
func printTimestamp() {
let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle)
print(timestamp)
}
printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"
Swift facilite la création et l'utilisation d'extensions. Je crée un fichier sharedCode.Swift
et y mets des énumérations, des extensions et d’autres choses amusantes. J'ai créé une extension NSDate
pour ajouter des fonctionnalités typiques, laborieuses et laides à taper encore et encore:
extension NSDate
{
func hour() -> Int
{
//Get Hour
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.Hour, fromDate: self)
let hour = components.hour
//Return Hour
return hour
}
func minute() -> Int
{
//Get Minute
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.Minute, fromDate: self)
let minute = components.minute
//Return Minute
return minute
}
func toShortTimeString() -> String
{
//Get Short Time String
let formatter = NSDateFormatter()
formatter.timeStyle = .ShortStyle
let timeString = formatter.stringFromDate(self)
//Return Short Time String
return timeString
}
}
en utilisant cette extension, vous pouvez maintenant faire quelque chose comme:
//Get Current Date
let currentDate = NSDate()
//Test Extensions in Log
NSLog("(Current Hour = \(currentDate.hour())) (Current Minute = \(currentDate.minute())) (Current Short Time String = \(currentDate.toShortTimeString()))")
Ce qui pour 11:51 écrirait:
(Heure actuelle = 11) (Minute actuelle = 51) (Chaîne de l'heure courte actuelle = 11h51)
Réponse rapide 2:
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Hour, .Minute], fromDate: date)
let hour = components.hour
let minutes = components.minute
Swift 4
let dateFormatter : DateFormatter = DateFormatter()
// dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.dateFormat = "yyyy-MMM-dd HH:mm:ss"
let date = Date()
let dateString = dateFormatter.string(from: date)
let interval = date.timeIntervalSince1970
SORTIE
2018-mai-01 10:41:31
Swift 3:
static func currentTime() -> String {
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
return "\(hour):\(minutes)"
}
PS - je ne sais pas ce que la question veut dire exactement en indiquant l'heure actuelle (et l'heure) comme date-heure, mais j'espère que ce qui précède devrait en expliquer assez pour répondre à la question.
Avec Swift 3 et Swift 4, Foundation
offre plusieurs façons d'atteindre la valeur horaire d'un objet Date
. Selon vos besoins, vous pouvez choisir l’un des quatre extraits de code suivants du Playground.
Calendar
dateComponents(_:from:)
Calendar
a une méthode appelée dateComponents(_:from:)
. dateComponents(_:from:)
a la déclaration suivante:
func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents
Renvoie tous les composants de date d'une date, en utilisant le fuseau horaire du calendrier.
Usage:
import Foundation
let date = Date()
let dateComponents = Calendar.current.dateComponents([.hour], from: date)
let hour = dateComponents.hour
print(String(describing: hour)) // may print: Optional(13)
Calendar
component(_:from:)
Calendar
a une méthode appelée component(_:from:)
. component(_:from:)
a la déclaration suivante:
Retourne la valeur pour un composant d'une date.
func component(_ component: Calendar.Component, from date: Date) -> Int
Usage:
import Foundation
let date = Date()
let hour = Calendar.current.component(.hour, from: date)
print(hour) // may print: 13
DateFormatter
dateFormat
DateFormatter
a une propriété appelée dateFormat
. dateFormat
a la déclaration suivante:
var dateFormat: String! { get set }
La chaîne de format de date utilisée par le destinataire.
Usage:
import Foundation
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH"
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13
Dateformatter
setLocalizedDateFormatFromTemplate(_:)
Dateformatter
a une méthode appelée setLocalizedDateFormatFromTemplate(_:)
. setLocalizedDateFormatFromTemplate(_:)
a la déclaration suivante:
func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
Définit le format de date à partir d'un modèle en utilisant les paramètres régionaux spécifiés pour le destinataire.
Usage:
import Foundation
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("HH")
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13
si vous avez juste besoin de l'heure du jour
let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())
Dans Swift 3,
let date = Date()
let calendar = Calendar.current()
let hour = calendar.component(.hour, from: date)
//Date
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
let dateString = "Current date is: \(dateFormatter.string(from: Date() as Date))"
labelfordate.text = String(dateString)
//Time
let timeFormatter = DateFormatter()
timeFormatter.timeStyle = .medium
let timeString = "Current time is: \(timeFormatter.string(from: Date() as Date))"
labelfortime.text = String(timeString)
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(DateAndTime.action), userInfo: nil, repeats: true)
}
func action()
{
//Date
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
let dateString = "Current date is: \(dateFormatter.string(from: Date() as Date))"
labelfordate.text = String(dateString)
//Time
let timeFormatter = DateFormatter()
timeFormatter.timeStyle = .medium
let timeString = "Current time is: \(timeFormatter.string(from: Date() as Date))"
labelfortime.text = String(timeString)
}
Remarque: DateAndTime dans le code du minuteur est le nom de la classe.
Je sais qu'il y a beaucoup de réponses mais je pense que la mienne pourrait être plus pratique pour beaucoup
extension String {
init(Epoch: Double) {
let date = Date(timeIntervalSince1970: Epoch)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ssZZZ"
self = dateFormatter.string(from: date)
}
}
Tu peux essayer ça
func getTime() -> (hour:Int, min:Int, sec:Int) {
let currentDateTime = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Hour,.Minute,.Second], fromDate: currentDateTime)
let hour = components.hour
let min = components.minute
let sec = components.second
return (hour,min,sec)
}
Maintenant, appelez cette méthode et recevez la date avec heure, minute et seconde
let currentTime = self.getTime()
print("Hour: \(currentTime.hour) Min: \(currentTime.min) Sec: \(currentTime.sec))")
Xcode 8.2.1 • Swift 3.0.2
extension Date {
var hour: Int { return Calendar.autoupdatingCurrent.component(.hour, from: self) }
}
let date = Date() // "Mar 16, 2017, 3:43 PM"
let hour = date.hour // 15
pour seulement la date dans un format spécifique
let dateFormatter1 = NSDateFormatter()
dateFormatter1.dateStyle = .MediumStyle
dateFormatter1.timeStyle = .NoStyle
dateFormatter1.dateFormat = "dd-MM-yyyy"
let date = dateFormatter1.stringFromDate(NSDate())
En développant la solution épique et concise de noiiv , voici la mise en œuvre encore plus concise de Swift 3/4:
Swift 3/4
let components = Calendar.current.dateComponents([.hour, .minute], from: Date())
let (hour, minute) = (components.hour, components.minute)
En outre, en développant extension de Leo Dabus nous pouvons avoir:
extension Date {
func components(_ components: Set<Calendar.Component>) -> DateComponents {
return Calendar.current.dateComponents(components, from: self)
}
func component(_ component: Calendar.Component) -> Int {
return Calendar.current.component(component, from: self)
}
var era: Int { return component(.era) }
var year: Int { return component(.year) }
var month: Int { return component(.month) }
var day: Int { return component(.day) }
var hour: Int { return component(.hour) }
var minute: Int { return component(.minute) }
var second: Int { return component(.second) }
var weekday: Int { return component(.weekday) }
var weekdayOrdinal: Int { return component(.weekdayOrdinal) }
var quarter: Int { return component(.quarter) }
var weekOfMonth: Int { return component(.weekOfMonth) }
var weekOfYear: Int { return component(.weekOfYear) }
var yearForWeekOfYear: Int { return component(.yearForWeekOfYear) }
var nanosecond: Int { return component(.nanosecond) }
var calendar: Calendar? { return components([.calendar]).calendar }
var timeZone: TimeZone? { return components([.timeZone]).timeZone }
}
Et utilisez-le comme suit:
let date = Date()
let (hour, minute) = (date.hour, date.minute)
Vous pouvez créer une extension sur Date
, ainsi vous pourrez facilement l'appeler dans d'autres fichiers. Voici un exemple d'extension de date utilisant une propriété calculée.
Il va l'imprimer: "Aujourd'hui, 16h55"
extension Date {
var formatter: DateFormatter? {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .short
formatter.doesRelativeDateFormatting = true
return formatter
}
}
Si vous avez besoin de formater la réponse d'une manière particulière, vous pouvez facilement utiliser cette méthode, la valeur par défaut = "jj-MM-aaaa".
extension Date {
func today(format : String = "dd-MM-yyyy") -> String{
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = format
return formatter.string(from: date)
}
}
Obtenir la date du jour peut maintenant être fait en utilisant
Date().today() or Date().today("dd/MM/yyyy")
func getCurrentDate() -> Date {
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let dateInString = dateFormatter.string(from: date)
let dateinDate = dateFormatter.date(from: dateInString)
return dateinDate!
}
Swift 4:
extension Date
{
func hour() -> Int
{
//Get Hour
let calendar = Calendar.current
let components = calendar.component(.hour, from: self)
let hour = components
//Return Hour
return hour
}
func minute() -> Int
{
//Get Minute
let calendar = Calendar.current
let components = calendar.component(.minute, from: self)
let minute = components
//Return Minute
return minute
}
}
Fonctionne avec Swift 5 (Xcode 10 & Xcode 11) (à partir de France UTC)
func getCurrentDateTime() {
let now = Date()
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "fr_FR")
formatter.dateFormat = "EEEE dd MMMM YYYY HH:mm"
myLabel.text = formatter.string(from: now)
myLabel.font = UIFont(name: "HelveticaNeue-Light", size: 12)
myLabel.textColor = UIColor.black
}
Si vous souhaitez afficher uniquement la date, définissez formatter.dateFormat
formatter.dateFormat = "EEEE dd MMMM YYYY"
Pour n’afficher que les heures, remplacez formatter.dateFormat
par
formatter.dateFormat = "HH:mm"
N'oubliez pas d'ajouter getCurrentDateTime()
sur viewDidLoad
.
Vous pouvez obtenir de Dateformatter
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
Voici l'extension Swift pour obtenir l'heure de votre emplacement actuel (GMT).
func getGMTTimeDate() -> Date {
var comp: DateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: self)
comp.calendar = Calendar.current
comp.timeZone = TimeZone(abbreviation: "GMT")!
return Calendar.current.date(from: comp)!
}
Obtenez maintenant le temps: -
Date().getGMTTimeDate()