Ich habe gerade mit dem Spielplatz angefangen. Ich versuche, eine einfache App zu erstellen.
Ich habe ein Datumsobjekt wie dieses erstellt:
var date = NSDate()
Wie bekomme ich die aktuelle Stunde? In anderen Sprachen kann ich so etwas machen:
var hour = date.hour
Aber ich kann keine solchen Eigenschaften/Methoden finden. Ich habe eine Methode gefunden, dateWithCalendarFormat
. Soll ich das benutzen? Wenn das so ist, wie?
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 Objective-c Wie bekomme ich Stunden und Minuten von NSDate?
Verglichen mit der Antwort von Nate erhalten Sie hier Zahlen, keine Zeichenfolgen. Wählen Sie Ihre Wahl!
Mit Swift 4 getestet
Sie können das aktuelle Datum und die aktuelle Uhrzeit so einfach abrufen:
let currentDateTime = Date()
Date
ist jedoch eine 64-Bit-Gleitkommazahl, die die Anzahl der Sekunden seit dem Bezugsdatum des 1. Januar 2001 um 00:00:00 UTC misst. Ich kann diese Nummer für die aktuelle datetime sehen, indem ich
Date().timeIntervalSinceReferenceDate
Zum Zeitpunkt dieses Schreibens gab es 497626515.185066
zurück, wahrscheinlich nicht genau das, wonach Sie suchen. Weiter lesen.
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 (anstelle von relativen Sekunden) zu verwenden, um eine Date
zu erstellen. Dazu können Sie DateComponents
verwenden, um die Komponenten anzugeben, und dann Calendar
, um das Datum zu erstellen. Die Variable Calendar
gibt den Kontext Date
an. Woher weiß es sonst, 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)
Andere Zeitzonenabkürzungen finden Sie hier . Wenn Sie dieses Feld leer lassen, wird standardmäßig die Zeitzone des Benutzers verwendet.
Methode 3
Die prägnanteste (aber nicht unbedingt die beste) Methode könnte die Verwendung von DateFormatter
sein.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Die technische Standards für Unicode zeigen andere Formate an , die DateFormatter
unterstützt.
Methode 1
Wenn Sie nur bestimmte Komponenten des Datums oder der Uhrzeit anzeigen möchten, können Sie mit CalendarUnit
die Komponenten angeben, die Sie aus Date
extrahieren möchten.
// 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 viel Arbeit, diese Zahlen für jeden Stil, jede Sprache und jede Region zu formatieren. Und das musst du nicht. Mit der DateFormatter
-Klasse wurde dies bereits für Sie 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 eingestellt ist. Für andere Sprachen und Regionen sieht die Formatierung anders aus.
Sie können auch die bequeme 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"
Mit Swift können Sie Erweiterungen sehr einfach erstellen und verwenden. Ich erstelle eine sharedCode.Swift
-Datei und füge Enumerationen, Erweiterungen und andere lustige Sachen hinzu. Ich habe eine NSDate
-Erweiterung 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 schreiben würde:
(Aktuelle Stunde = 11) (Aktuelle Minute = 51) (Aktuelle Kurzzeitfolge = 11:51 Uhr)
Schnelle 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
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
01.08.1801, 01: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 - Sie sind nicht sicher, was die Frage genau bedeutet, indem Sie die aktuelle Uhrzeit (und Stunde) als Datum und Uhrzeit angeben, aber hoffentlich sollte das oben Genannte erklären, um die Frage zu beantworten.
Mit Swift 3 und Swift 4 bietet Foundation
viele Möglichkeiten für den Stundenwert eines Date
-Objekts. Je nach Ihren Bedürfnissen können Sie einen der vier folgenden Playground-Code-Snippets auswählen.
Calendar
dateComponents(_:from:)
-MethodeCalendar
hat eine Methode namens dateComponents(_:from:)
. dateComponents(_:from:)
hat die folgende Deklaration:
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)
Calendar
component(_:from:)
-MethodeCalendar
hat eine Methode namens component(_:from:)
. component(_:from:)
hat die folgende Deklaration:
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
DateFormatter
dateFormat
-Eigenschaft verwendenDateFormatter
hat eine Eigenschaft namens dateFormat
. dateFormat
hat die folgende Deklaration:
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
Dateformatter
setLocalizedDateFormatFromTemplate(_:)
-MethodeDateformatter
hat eine Methode namens setLocalizedDateFormatFromTemplate(_:)
. setLocalizedDateFormatFromTemplate(_:)
hat die folgende Deklaration:
func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
Legt das Datumsformat aus einer Vorlage mit dem angegebenen Gebietsschema 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
wenn Sie nur die Stunde des Tages benötigen
let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())
In 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)
}
Hinweis: DateAndTime im Timer-Code ist der Klassenname.
Ich weiß, dass es viele Antworten gibt, aber ich denke, dass meine für viele bequemer sind
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)
}
}
Sie können es 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 Stunden, Minuten und Sekunden
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
nur für Datum in einem bestimmten Format
let dateFormatter1 = NSDateFormatter()
dateFormatter1.dateStyle = .MediumStyle
dateFormatter1.timeStyle = .NoStyle
dateFormatter1.dateFormat = "dd-MM-yyyy"
let date = dateFormatter1.stringFromDate(NSDate())
Erweitere noiivs episch prägnante Lösung , hier ist die noch prägnantere Swift 3/4 Implementierung:
Swift 3/4
let components = Calendar.current.dateComponents([.hour, .minute], from: Date())
let (hour, minute) = (components.hour, components.minute)
Wenn wir auf die Erweiterung von Leo Dabus erweitern, können wir auch 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 können eine Erweiterung für Date
erstellen, damit Sie sie leicht in anderen Dateien aufrufen können. 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
}
}
Wenn Sie die Antwort auf eine bestimmte Art und Weise formatieren müssen, können Sie diese Methode ganz einfach verwenden: Standard = "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")
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
}
}
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, setzen Sie formatter.dateFormat
formatter.dateFormat = "EEEE dd MMMM YYYY"
Um nur Stunden anzuzeigen, ändern Sie formatter.dateFormat
zu
formatter.dateFormat = "HH:mm"
Vergessen Sie nicht, getCurrentDateTime()
für viewDidLoad
hinzuzufügen.
Sie können von Dateformatter bekommen
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
Hier ist die Erweiterung Swift , um Ihre aktuelle Standortzeit (GMT) zu ermitteln.
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()