web-dev-qa-db-fra.com

Comment obtenir l'heure actuelle comme date/heure

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?

215
JOSEFtw

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! 

330
noliv

Testé avec Swift 4

Obtenir la date et l'heure actuelles

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.

Créer une autre date et heure

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.

Affichage de la date et de l'heure

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.

Une étude plus approfondie

150
Suragch

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"
53
Scott Gardner

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)

49
user2266987

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
26
Matthieu Riegler

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

15
Keshav Gera

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.

11
Charlie Seligman

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.


#1. Utilisation de la méthode CalendardateComponents(_: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)

# 2. Utilisation de la méthode Calendarcomponent(_: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

# 3. Utilisation de la propriété DateFormatterdateFormat

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

# 4. Utilisation de la méthode DateformattersetLocalizedDateFormatFromTemplate(_:)

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
7
Imanou Petit

si vous avez juste besoin de l'heure du jour

let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())
7
Bono Lv

Dans Swift 3,

    let date = Date()
    let calendar = Calendar.current()

    let hour = calendar.component(.hour, from: date)
6
SaRaVaNaN DM

Utilisation de Date Formatter-Swift 3.0

//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)

Date et heure de mise à jour toutes les secondes

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.

6
Kay Cee

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)
    }
}
5
user9045632

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))")
3
nabu

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
2
Leo Dabus

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())
2
zain ullah

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)
1
NoodleOfDeath

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
    }
}
1
pcnick13

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") 
0
king_T
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!
}
0
Abuzar Manzoor

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
        }
}
0

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.

0
Benjamin Tourin

Vous pouvez obtenir de Dateformatter

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
0
Beyaz

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()
0
Chathuranga Silva