Net begonnen met de speeltuin. Ik probeer een eenvoudige app te maken.
Ik heb een datumobject als volgt gemaakt:
var date = NSDate()
Hoe kan ik het huidige uur krijgen? In andere talen kan ik zoiets doen:
var hour = date.hour
Maar ik kan geen eigenschappen / methoden vinden. Ik heb een methode gevonden, dateWithCalendarFormat
. Moet ik dat gebruiken? Zo ja, hoe?
1, Autoriteit 100%
Update voor Swift 3:
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
Ik doe dit:
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute
Zie dezelfde vraag in objectief-c Hoe kan ik Ontvang uur en minuten van NSDATE?
In vergelijking met het antwoord van Nate krijgt u nummers met deze, geen snaren … Kies uw keuze!
2, Autoriteit 47%
Getest met SWIFT 4
De huidige datum en tijd krijgen
U kunt de huidige datum en tijd krijgen, zoals eenvoudigweg als dit:
let currentDateTime = Date()
Date
is echter een 64-bits getal met drijvende komma dat het aantal seconden meet sinds de referentiedatum van 1 januari 2001 om 00:00:00 UTC. Ik kan dat nummer voor de huidige datetime zien door
. te gebruiken
Date().timeIntervalSinceReferenceDate
Op het moment van schrijven werd 497626515.185066
geretourneerd, waarschijnlijk niet precies wat u zoekt. Blijf lezen.
Een andere datum en tijd maken
Methode 1
Als je het aantal seconden voor of na de peildatum weet, kun je dat gebruiken.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Methode 2
Natuurlijk zou het gemakkelijker zijn om zaken als jaren, maanden, dagen en uren (in plaats van relatieve seconden) te gebruiken om een Date
te maken. Hiervoor kunt u DateComponents
gebruiken om de componenten te specificeren en vervolgens Calendar
om de datum aan te maken. De Calendar
geeft de Date
context. Hoe zou het anders weten in welke tijdzone of kalender het moet worden uitgedrukt?
// 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 afkortingen voor tijdzones vindt u hier. Als u dat leeg laat, wordt standaard de tijdzone van de gebruiker gebruikt.
Methode 3
De meest beknopte manier (maar niet noodzakelijk de beste) zou kunnen zijn om Dateformatter
te gebruiken.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
De Unicode technische standaarden laten andere formaten ziendie Dateformatter
ondersteunt.
De datum en tijd weergeven
Methode 1
Als u alleen bepaalde componenten van de datum of tijd wilt weergeven, kunt u CalendarUnit
gebruiken om de componenten te specificeren die u wilt extraheren uit 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
Zie ook dit antwoord.
Methode 2
Methode 1 gaf je de componenten, maar het zou veel werk zijn om die getallen op te maken voor elke stijl, taal en regio. En dat hoeft ook niet. Dit is al voor je gedaan met de klasse 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
Hier is een vervolg op de bovenstaande code die meer opmaakopties toont:
// "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)
Houd er echter rekening mee dat dit voor Engels is met de regio ingesteld op de VS. Voor andere talen en regio’s ziet de opmaak er anders uit.
Verdere studie
- Hoe te werken met datums en tijden in Swift 3, deel 1: Datums, kalenders en DateComponents
- Hoe te werken met datums en tijden in Swift 3, deel 2: DateFormatter
- Hoe te werken met datums en tijden in Swift 3, deel 3: Datumberekening
Antwoord 3, autoriteit 14%
U kunt ook de gemaksmethode van NSDateFormatter gebruiken, bijvoorbeeld
func printTimestamp() {
let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle)
print(timestamp)
}
printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"
Antwoord 4, autoriteit 12%
Swift maakt het heel eenvoudig om extensies te maken en te gebruiken. Ik maak een sharedCode.swift
bestand aan en zet er opsommingen, extensies en andere leuke dingen in. Ik heb een NSDate
-extensie gemaakt om een aantal typische functionaliteit toe te voegen die omslachtig en lelijk is om steeds opnieuw te typen:
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
}
}
Met behulp van deze extensie kunt u nu iets doen als:
//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()))")
die voor 11:51 uur zou schrijven:
(Huidig uur = 11) (Huidige minuut = 51) (Huidige korte tijdstring = 11:51 AM)
5, Autoriteit 6%
Swift 2 Antwoord:
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Hour, .Minute], fromDate: date)
let hour = components.hour
let minutes = components.minute
6, Autoriteit 6%
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
output
2018-mei-01 10:41:31
Antwoord 7, autoriteit 6%
U kunt gebruiken in swift 4 of 5 zoals hieronder
let date = Date()
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = df.string(from: date)
Uitvoer zal zijn zoals hieronder
2019-12-20 09:40:08
Antwoord 8, autoriteit 3%
Met Swift 5 biedt Foundation
vele manieren om de uurwaarde uit een Date
-object te halen. Afhankelijk van uw behoeften kunt u een van de vier volgende Playground-codefragmentenkiezen.
#1. Met behulp van de Calendar
dateComponents(_:from:)
methode
Calendar
heeft een methode genaamd dateComponents(_:from:)
. dateComponents(_:from:)
heeft de volgende verklaring:
func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents
Retourneert alle datumcomponenten van een datum, gebruikmakend van de kalendertijdzone.
Gebruik:
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. Met behulp van Calendar
component(_:from:)
methode
Calendar
heeft een methode genaamd component(_:from:)
. component(_:from:)
heeft de volgende verklaring:
Retourneert de waarde voor één onderdeel van een datum.
func component(_ component: Calendar.Component, from date: Date) -> Int
Gebruik:
import Foundation
let date = Date()
let hour = Calendar.current.component(.hour, from: date)
print(hour) // may print: 13
#3. De eigenschap Dateformatter
dateFormat
gebruiken
Dateformatter
heeft een eigenschap genaamd dateFormat
. dateFormat
heeft de volgende verklaring:
var dateFormat: String! { get set }
De datumnotatiereeks die door de ontvanger wordt gebruikt.
Gebruik:
import Foundation
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH"
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13
#4. Met behulp van Dateformatter
setLocalizedDateFormatFromTemplate(_:)
methode
Dateformatter
heeft een methode genaamd setLocalizedDateFormatFromTemplate(_:)
. setLocalizedDateFormatFromTemplate(_:)
heeft de volgende aangifte:
func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
Stelt het datumformaat in van een sjabloon met behulp van de opgegeven locale voor de ontvanger.
Gebruik:
import Foundation
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("HH")
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13
9, Autoriteit 3%
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 – niet zeker wat de vraag precies betekent door de huidige tijd (en uur) als datumtijd, maar hopelijk zou het bovenstaande voldoende moeten verklaren om de vraag te beantwoorden.
10, Autoriteit 2%
Als u alleen het uur van de dag nodig hebt
let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())
11, Autoriteit 2%
Gebruik datumformatter -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)
Update datum en tijd elke seconden
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)
}
OPMERKING: DATEANDTION in de timercode is de klasnaam.
12
In Swift 3,
let date = Date()
let calendar = Calendar.current()
let hour = calendar.component(.hour, from: date)
13
Ik weet dat er veel antwoorden zijn, maar ik denk dat de mijne misschien handiger is voor veel
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)
}
}
Antwoord 14
U kunt dit proberen
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)
}
Noem nu die methode en ontvang de datum met uur, min en seconde
let currentTime = self.getTime()
print("Hour: \(currentTime.hour) Min: \(currentTime.min) Sec: \(currentTime.sec))")
Antwoord 15
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
Antwoord 16
Uitbreiding van noiiv’s episch beknopte oplossing, hier is de nog beknoptere Swift 3/4-implementatie:
Swift 3/4
let components = Calendar.current.dateComponents([.hour, .minute], from: Date())
let (hour, minute) = (components.hour, components.minute)
Ook, als uitbreiding op Leo Dabus’s extensiedie we kunnen hebben:
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 }
}
En gebruik het zo:
let date = Date()
let (hour, minute) = (date.hour, date.minute)
Antwoord 17
alleen voor datum in specifiek formaat
let dateFormatter1 = NSDateFormatter()
dateFormatter1.dateStyle = .MediumStyle
dateFormatter1.timeStyle = .NoStyle
dateFormatter1.dateFormat = "dd-MM-yyyy"
let date = dateFormatter1.stringFromDate(NSDate())
Antwoord 18
Swift 5
func printTimestamp() {
let timestamp = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .medium, timeStyle: .short)
print(timestamp)
}
en oproep functie printTimestamp()
Antwoord 19
U kunt Swift4 of Swift 5 hieronder gebruiken als:
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let current_date = dateFormatter.string(from: date)
print("current_date-->",current_date)
uitvoer zoals:
2020-03-02
Antwoord 20
Je kunt een extensie maken op Date
, zodat je deze gemakkelijk in andere bestanden kunt aanroepen. Hier is een voorbeeld van een datumextensie die een berekende eigenschap gebruikt.
Het zal het afdrukken: “Vandaag, 16:55”
extension Date {
var formatter: DateFormatter? {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .short
formatter.doesRelativeDateFormatting = true
return formatter
}
}
Antwoord 21
Eén regel Swift 5.2
let date = String(DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .short))
Antwoord 22
Als u het antwoord op een bepaalde manier moet opmaken, kunt u eenvoudig deze methode gebruiken, de standaard = “dd-MM-yyyy”.
extension Date {
func today(format : String = "dd-MM-yyyy") -> String{
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = format
return formatter.string(from: date)
}
}
De datum van vandaag ophalen kan nu met
Date().today() or Date().today("dd/MM/yyyy")
Antwoord 23
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
}
}
Antwoord 24
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!
}
Antwoord 25
Hier is de SWIFT-extensie om uw huidige apparaatlocatietijd (GMT) te krijgen.
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)!
}
Nu krijg tijd: –
Date().getGMTTimeDate()
26
U kunt van DATEFORTERTER
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
27
onderstaande code is de nieuwste SWIFT-versie (5):
func getTimestamp()-> String {
let timestamp = DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .short)
return "\(timestamp)"
}