So erhalten Sie die aktuelle Zeit als Datum / Uhrzeit


262

Ich habe gerade mit dem Spielplatz angefangen. Ich versuche eine einfache App zu erstellen.

Ich habe ein Datumsobjekt wie folgt erstellt:

var date = NSDate()

Wie kann ich die aktuelle Stunde erhalten? In anderen Sprachen kann ich so etwas machen:

var hour = date.hour

Aber ich kann solche Eigenschaften / Methoden nicht finden. Ich habe eine Methode gefunden dateWithCalendarFormat. Soll ich das benutzen? Wenn das so ist, wie?

Antworten:


389

Update für Swift 3:

let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)

Ich mache das:

let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute

Siehe die gleiche Frage in Ziel-c Wie erhalte ich Stunden und Minuten von NSDate?

Im Vergleich zu Nates Antwort erhalten Sie Zahlen mit dieser, keine Zeichenfolgen ... wählen Sie Ihre Wahl!


Hallo, danke für die Antwort, zum Beispiel, wenn die Minute weniger als zwei Zeichen beträgt, wie kann ich sie mit zwei Zeichen wie "04"
Yestay Muratov

2
@YestayMuratov Diese praktische Webseite bietet alle Möglichkeiten zum Formatieren eines Datums mit dem NSDateFormatter in Swift :) codingexplorer.com/…
Max

15
Es sieht so aus, als müsste man in der neuen Swift-Version (2) etwas Ähnliches verwenden let components = calendar.components(.NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date), der vertikale Schrägstrich kann hier nicht mehr verwendet werden.
Hola Soja Edu Feliz Navidad

5
let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)entfernte das zusätzliche '.' vor NSCalendarUnit
cakes88

45
Swift 2.1: let components = calendar.components([ .Hour, .Minute, .Second], fromDate: date)
Obiwahn

184

Getestet mit Swift 4

Abrufen des aktuellen Datums und der aktuellen Uhrzeit

So einfach können Sie das aktuelle Datum und die Uhrzeit abrufen:

let currentDateTime = Date()

Es handelt sich jedoch Dateum eine 64-Bit-Gleitkommazahl, die die Anzahl der Sekunden seit dem Referenzdatum vom 1. Januar 2001 um 00:00:00 UTC misst . Ich kann diese Nummer für die aktuelle Datums- / Uhrzeitangabe mit verwenden

Date().timeIntervalSinceReferenceDate

Zum Zeitpunkt dieses Schreibens kehrte es zurück 497626515.185066, wahrscheinlich nicht genau das, wonach Sie suchen. Weiter lesen.

Erstellen eines anderen Datums und einer anderen Uhrzeit

Methode 1

Wenn Sie die Anzahl der Sekunden vor oder nach dem Referenzdatum kennen, können Sie diese verwenden.

let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM

Methode 2

Natürlich wäre es einfacher, Dinge wie Jahre, Monate, Tage und Stunden (anstatt relative Sekunden) zu verwenden, um eine zu erstellen Date. Hierzu können Sie DateComponentsdie Komponenten angeben und anschließend Calendardas Datum erstellen. Das Calendargibt den DateKontext. Wie würde es sonst wissen, in welcher Zeitzone oder in welchem ​​Kalender es ausgedrückt werden soll?

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

Weitere Zeitzonenabkürzungen finden Sie hier . Wenn Sie dieses Feld leer lassen, wird standardmäßig die Zeitzone des Benutzers verwendet.

Methode 3

Der prägnanteste Weg (aber nicht unbedingt der beste) könnte sein DateFormatter.

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")

Die Unicode - technischen Standards zeigen andere Formate , dass DateFormatterStützen.

Datum und Uhrzeit anzeigen

Methode 1

Wenn Sie nur bestimmte Komponenten des Datums oder der Uhrzeit anzeigen möchten, können Sie CalendarUnitdie Komponenten angeben, aus denen Sie extrahieren möchten 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

Siehe auch diese Antwort .

Methode 2

Methode 1 gab Ihnen die Komponenten, aber es wäre eine Menge Arbeit, diese Zahlen für jeden Stil, jede Sprache und jede Region zu formatieren. Und das musst du nicht. Dies wurde bereits für Sie mit der DateFormatterKlasse erledigt .

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

Hier ist eine Fortsetzung des obigen Codes, der weitere Formatierungsoptionen zeigt:

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

Beachten Sie jedoch, dass dies für Englisch gilt und die Region auf die USA ausgerichtet ist. Für andere Sprachen und Regionen sieht die Formatierung anders aus.

Weitere Studie


58

Sie können auch die Convenience-Methode von NSDateFormatter verwenden, z.

func printTimestamp() {
  let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle)
  print(timestamp)
}
printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"

2
Das Erstellen eines NSDateFormatter ist teuer. Sie sollten es erstellen und wiederverwenden.
Rog

3
Swift 3: let timestamp = DateFormatter.localizedString (von: Date (), dateStyle: .short, timeStyle: .short)
Brian

51

Swift macht es wirklich einfach, Erweiterungen zu erstellen und zu verwenden. Ich erstelle eine sharedCode.swiftDatei und füge Enums, Erweiterungen und andere lustige Dinge hinzu. Ich habe eine NSDateErweiterung erstellt, um einige typische Funktionen hinzuzufügen, die mühsam und hässlich sind und immer wieder eingegeben werden müssen:

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

Mit dieser Erweiterung können Sie jetzt Folgendes tun:

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

Was für 11:51 Uhr ausschreiben würde:

(Aktuelle Stunde = 11) (Aktuelle Minute = 51) (Aktuelle Kurzzeitzeichenfolge = 11:51 Uhr)


26

Swift 2 Antwort:

 let date = NSDate()
 let calendar = NSCalendar.currentCalendar()
 let components = calendar.components([.Hour, .Minute], fromDate: date)
 let hour = components.hour
 let minutes = components.minute

23

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

AUSGABE

2018-Mai-01 10:41:31


1
Intervall wird nie verwendet.
Nerdy Bunz

11

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 - Ich bin mir nicht sicher, was die Frage genau bedeutet, indem ich die aktuelle Uhrzeit (und Stunde) als Datums- und Uhrzeitangabe erhalte. Hoffentlich sollte das oben Genannte genug erklären, um die Frage zu beantworten.


Die Antwort von SaRaVaNaN DM oben hatte ein zusätzliches '()' am Ende von Calendar.current.
Charlie Seligman

10

Bietet mit Swift 5 Foundationviele Möglichkeiten, den Stundenwert eines DateObjekts abzurufen. Je nach Ihren Anforderungen können Sie eines der vier folgenden Spielplatz-Codefragmente auswählen .


# 1. Mit Calendar dateComponents(_:from:)Methode

Calendarhat eine Methode namens dateComponents(_:from:). dateComponents(_:from:)hat die folgende Erklärung:

func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents

Gibt alle Datumskomponenten eines Datums unter Verwendung der Kalenderzeitzone zurück.

Verwendungszweck:

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. Mit Calendar component(_:from:)Methode

Calendarhat eine Methode namens component(_:from:). component(_:from:)hat die folgende Erklärung:

Gibt den Wert für eine Komponente eines Datums zurück.

func component(_ component: Calendar.Component, from date: Date) -> Int

Verwendungszweck:

import Foundation

let date = Date()
let hour = Calendar.current.component(.hour, from: date)
print(hour) // may print: 13

#3. Mit DateFormatter dateFormatImmobilien

DateFormatterhat eine Eigenschaft namens dateFormat. dateFormathat die folgende Erklärung:

var dateFormat: String! { get set }

Die vom Empfänger verwendete Datumsformatzeichenfolge.

Verwendungszweck:

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH"
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13

# 4. Mit Dateformatter setLocalizedDateFormatFromTemplate(_:)Methode

Dateformatterhat eine Methode namens setLocalizedDateFormatFromTemplate(_:). setLocalizedDateFormatFromTemplate(_:)hat die folgende Erklärung:

func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)

Legt das Datumsformat aus einer Vorlage unter Verwendung des angegebenen Gebietsschemas für den Empfänger fest.

Verwendungszweck:

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("HH")
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13

7

wenn Sie nur die Stunde des Tages brauchen

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

6

In Swift 3

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

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

let calendar = Calendar.current; let unitFlags: Set<Calendar.Component> = Set<Calendar.Component ([.hour]); let components = calendar.dateComponents(unitFlags, from: self)
AbdulMomen

6

Verwenden des Datumsformatierers -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)

Aktualisieren Sie Datum und Uhrzeit alle Sekunden

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)

    }

Hinweis: DateAndTime im Timer-Code ist der Klassenname .


5

Ich weiß, dass es viele Antworten gibt, aber ich denke, dass meine für viele bequemer sein können

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

4

Sie können dies versuchen

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

Rufen Sie nun diese Methode auf und erhalten Sie das Datum mit Stunde, Minute und Sekunde

    let currentTime = self.getTime()
    print("Hour: \(currentTime.hour) Min: \(currentTime.min) Sec: \(currentTime.sec))")

4

Sie können in schnell 4 oder 5 wie unten verwenden

let date = Date()
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = df.string(from: date)

Ouput wird wie unten sein

2019-12-20 09:40:08

3

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

oder auch nurDate().hour
NoodleOfDeath

1
@NoodleOfDeath sicher. Das hängt davon ab, ob ein Verweis auf das Datum benötigt wird oder nicht.
Leo Dabus

Sehr wahr, und ich nehme an, dass Sie für alle intensiven Zwecke dieselbe
Datumsvariable verwenden

3

Hier ist die noch präzisere Swift 3/4-Implementierung, die die episch präzise Lösung von noiiv erweitert :

Swift 3/4

let components = Calendar.current.dateComponents([.hour, .minute], from: Date())
let (hour, minute) = (components.hour, components.minute)

Wenn wir die Erweiterung von Leo Dabus erweitern , können wir außerdem Folgendes haben:

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 }

}

Und benutze es so:

let date = Date()
let (hour, minute) = (date.hour, date.minute)

Sie müssen keine Option zurückgeben, wenn Sie etwas wie Jahr, Monat, Tag usw. von einem DateObjekt erhalten. Btw Kalender Komponente Methode ist besser geeignet für einzelne Komponente
Leo Dabus

@LeoDabus das optionale wird propagiert, weil der DateComponents.yearAccessor istInt?
NoodleOfDeath

1
Sie können die Kalenderkomponentenmethode verwenden, die nicht optional zurückgibt. Sie können auch das Auspacken erzwingen. Es wird niemals scheitern. Aber ich würde mich an die Einzelelementkomponentenmethode halten
Leo Dabus

@LeoDabus aktualisiert, um die componentMethode für diese Accessoren zu verwenden
NoodleOfDeath

2

für nur Datum in einem bestimmten Format

    let dateFormatter1 = NSDateFormatter()
    dateFormatter1.dateStyle = .MediumStyle
    dateFormatter1.timeStyle = .NoStyle
    dateFormatter1.dateFormat = "dd-MM-yyyy"
    let date = dateFormatter1.stringFromDate(NSDate())

1
Nur eine Anmerkung: Wenn Sie NSDateFormatter verwenden, müssen diese teuren Objekte erstellt werden. Sie können daher einen Lazy Getter verwenden, um denselben NSDateFormatter wiederzuverwenden, wenn Sie diesen Code in einer Tabelle oder Sammlung oder etwas anderem verwenden. Die Stile und das Format können bei Bedarf trivial geändert werden, ohne die Leistung zu beeinträchtigen, und können diese jederzeit neu erstellen, wo immer sie benötigt werden. Prost.!
jcpennypincher

2

Swift 5

func printTimestamp() {
    let timestamp = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .medium, timeStyle: .short)
    print(timestamp)
}

und Aufruffunktion printTimestamp ()


1

Sie können eine Erweiterung erstellen Date, auf diese Weise können Sie sie problemlos in anderen Dateien aufrufen. Hier ist ein Beispiel für eine Datumserweiterung, die eine berechnete Eigenschaft verwendet.

Es wird ausgedruckt: "Heute, 16:55 Uhr"

extension Date {

    var formatter: DateFormatter? {
        let formatter = DateFormatter()
        formatter.dateStyle = .short
        formatter.timeStyle = .short
        formatter.doesRelativeDateFormatting = true

        return formatter
    }
}

1

Sie können Swift4 oder Swift 5 wie folgt verwenden:

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let current_date = dateFormatter.string(from: date)
print("current_date-->",current_date)

Ausgabe wie:

2020-03-02

0

Wenn Sie die Antwort auf eine bestimmte Weise formatieren müssen, können Sie diese Methode einfach verwenden, die Standardeinstellung = "TT-MM-JJJJ".

extension Date {

   func today(format : String = "dd-MM-yyyy") -> String{
      let date = Date()
      let formatter = DateFormatter()
      formatter.dateFormat = format
      return formatter.string(from: date)
   }
}

Das Abrufen des heutigen Datums kann jetzt mit erfolgen

Date().today() or Date().today("dd/MM/yyyy") 

0

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

Bitte erläutern Sie Ihre Antwort.
MrMaavin

es erweitert das integrierte Datum void ... es setzt die Stundenvariable von void Date auf den int-Wert, ebenso wie die Minutenvariable, und gibt dann Stunde und Minute als int-Wert zurück. Danach können Sie es im Code verwenden, wie Sie möchten. Dann können Sie diese Werte beispielsweise über DateComponents () aufrufen - DateComponents.hour = Date.hour () - Sie erhalten den int-Wert der aktuellen Zeit.
Vladimir Sukanica

0
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

Hier ist die SWIFT- Erweiterung, um Ihre aktuelle Geräteortungszeit (GMT) abzurufen.

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)!
}

Holen Sie sich jetzt Zeit: -

Date().getGMTTimeDate()

0

Funktioniert mit Swift 5 (Xcode 10 & Xcode 11) (von 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
}

Wenn Sie nur das Datum anzeigen möchten, stellen Sie ein formatter.dateFormat

formatter.dateFormat = "EEEE dd MMMM YYYY"

Um nur Stunden anzuzeigen, wechseln Sie formatter.dateFormatzu

formatter.dateFormat = "HH:mm"

Vergessen Sie nicht , hinzuzufügen , getCurrentDateTime()auf viewDidLoad.


-1

Sie können von Dateformatter erhalten

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.