Hoe u de huidige tijd als datetime

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

Dateis 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.185066geretourneerd, 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 Datete maken. Hiervoor kunt u DateComponentsgebruiken om de componenten te specificeren en vervolgens Calendarom de datum aan te maken. De Calendargeeft de Datecontext. 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 Dateformatterte 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 Dateformatterondersteunt.

De datum en tijd weergeven

Methode 1

Als u alleen bepaalde componenten van de datum of tijd wilt weergeven, kunt u CalendarUnitgebruiken 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


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.swiftbestand 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 Foundationvele 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 CalendardateComponents(_:from:)methode

Calendarheeft 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 Calendarcomponent(_:from:)methode

Calendarheeft 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 DateformatterdateFormatgebruiken

Dateformatterheeft een eigenschap genaamd dateFormat. dateFormatheeft 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 DateformattersetLocalizedDateFormatFromTemplate(_:)methode

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

Other episodes