Cara mendapatkan waktu saat ini sebagai datetime


265

Baru mulai dengan taman bermain. Saya mencoba membuat aplikasi sederhana.

Saya telah membuat objek tanggal seperti ini:

var date = NSDate()

Bagaimana saya bisa mendapatkan jam saat ini? Dalam bahasa lain saya dapat melakukan sesuatu seperti ini:

var hour = date.hour

Tetapi saya tidak dapat menemukan properti / metode seperti itu. Saya telah menemukan metode dateWithCalendarFormat,. Haruskah saya menggunakan itu? Jika demikian, BAGAIMANA?

Jawaban:


390

Pembaruan untuk Swift 3:

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

Saya melakukan ini:

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

Lihat pertanyaan yang sama dalam tujuan-c. Bagaimana saya mendapatkan jam dan menit dari NSDate?

Dibandingkan dengan jawaban Nate, Anda akan mendapatkan angka dengan yang ini, bukan string ... pilih pilihan Anda!


Halo, terima kasih atas jawabannya, misalnya jika menit kurang dari dua karakter, bagaimana saya dapat mengembalikannya dengan dua karakter seperti "04"
Yestay Muratov

2
@YestayMuratov Halaman web praktis ini memberi tahu semua cara yang memungkinkan untuk memformat tanggal menggunakan NSDateFormatter di Swift :) codingexplorer.com/...
Max

15
Tampaknya versi Swift baru (2) Anda harus menggunakan sesuatu yang mirip dengan let components = calendar.components(.NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date), garis miring vertikal tidak dapat digunakan di sini lagi.
Hola Kedelai Edu Feliz Navidad

5
let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Minute), fromDate: date)menghapus ekstra '.' sebelum NSCalendarUnit
cakes88

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

184

Diuji dengan Swift 4

Mendapatkan Tanggal dan Waktu Saat Ini

Anda bisa mendapatkan tanggal dan waktu saat ini sesederhana ini:

let currentDateTime = Date()

Namun, Dateadalah angka floating point 64-bit yang mengukur jumlah detik sejak tanggal referensi 1 Januari 2001 pukul 00:00:00 UTC . Saya bisa melihat nomor itu untuk datetime saat ini dengan menggunakan

Date().timeIntervalSinceReferenceDate

Pada saat penulisan ini, ia kembali 497626515.185066, mungkin tidak persis apa yang Anda cari. Teruslah membaca.

Membuat Tanggal dan Waktu Lain

Metode 1

Jika Anda tahu jumlah detik sebelum atau setelah tanggal referensi, Anda dapat menggunakannya.

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

Metode 2

Tentu saja, akan lebih mudah untuk menggunakan hal-hal seperti tahun, bulan, hari dan jam (daripada detik relatif) untuk membuat Date. Untuk ini, Anda dapat menggunakan DateComponentsuntuk menentukan komponen dan kemudian Calendaruntuk membuat tanggal. The Calendarmemberikan Datekonteks. Kalau tidak, bagaimana ia bisa tahu zona waktu atau kalender mana untuk mengekspresikannya?

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

Singkatan zona waktu lainnya dapat ditemukan di sini . Jika Anda membiarkannya kosong, maka defaultnya adalah menggunakan zona waktu pengguna.

Metode 3

Cara yang paling ringkas (tapi belum tentu yang terbaik) bisa digunakan DateFormatter.

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

Standar teknis Unicode menunjukkan format lain yang DateFormattermendukung.

Menampilkan Tanggal dan Waktu

Metode 1

Jika Anda hanya ingin menampilkan komponen tertentu dari tanggal atau waktu yang dapat Anda gunakan CalendarUnituntuk menentukan komponen yang ingin Anda ekstrak 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

Lihat jawaban ini juga.

Metode 2

Metode 1 memberi Anda komponen, tetapi akan banyak pekerjaan untuk memformat angka-angka itu untuk setiap gaya, bahasa, dan wilayah. Dan Anda tidak perlu melakukannya. Ini sudah dilakukan untuk Anda bersama DateFormatterkelas.

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

Ini adalah kelanjutan dari kode di atas yang menunjukkan lebih banyak opsi pemformatan:

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

Perlu diingat, bahwa ini untuk bahasa Inggris dengan wilayah yang ditetapkan ke AS. Untuk bahasa dan wilayah lain pemformatan akan terlihat berbeda.

Pelajaran lanjutan


58

Anda juga bisa menggunakan metode kenyamanan NSDateFormatter, misalnya,

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

2
Membuat NSDateFormatter mahal. Anda harus membuat dan menggunakannya kembali.
Rog

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

51

Swift membuatnya sangat mudah untuk membuat dan menggunakan ekstensi. Saya membuat sharedCode.swiftfile dan memasukkan enums, ekstensi, dan hal-hal menyenangkan lainnya ke dalamnya. Saya membuat NSDateekstensi untuk menambahkan beberapa fungsi khas yang melelahkan dan jelek untuk mengetik berulang-ulang:

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

menggunakan ekstensi ini sekarang Anda dapat melakukan sesuatu seperti:

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

Yang untuk 11:51 akan menulis:

(Jam Sekarang = 11) (Menit Saat Ini = 51) (String Waktu Singkat Saat Ini = 11:51 AM)


26

Swift 2 menjawab:

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

23

Cepat 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

KELUARAN

2018-Mei-01 10:41:31


1
Interval tidak pernah digunakan.
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 - tidak yakin apa artinya pertanyaan dengan tepat dengan mendapatkan waktu saat ini (dan jam) sebagai waktu kencan, tetapi mudah-mudahan di atas harus menjelaskan cukup untuk menjawab pertanyaan.


Jawaban SaRaVaNaN DM di atas memiliki tambahan '()' di akhir Calendar.current.
Charlie Seligman

10

Dengan Swift 5, Foundationmenawarkan banyak cara untuk mendapatkan nilai jam dari suatu Dateobjek. Menurut kebutuhan Anda, Anda dapat memilih salah satu dari empat cuplikan kode Taman Bermain berikut .


# 1. Menggunakan Calendar dateComponents(_:from:)metode

Calendarmemiliki metode yang disebut dateComponents(_:from:). dateComponents(_:from:)memiliki deklarasi berikut:

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

Mengembalikan semua komponen tanggal pada suatu tanggal, menggunakan zona waktu kalender.

Pemakaian:

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

Calendarmemiliki metode yang disebut component(_:from:). component(_:from:)memiliki deklarasi berikut:

Mengembalikan nilai untuk satu komponen tanggal.

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

Pemakaian:

import Foundation

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

# 3. Menggunakan DateFormatter dateFormatproperti

DateFormattermemiliki properti yang disebut dateFormat. dateFormatmemiliki deklarasi berikut:

var dateFormat: String! { get set }

String format tanggal yang digunakan oleh penerima.

Pemakaian:

import Foundation

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

# 4 Menggunakan Dateformatter setLocalizedDateFormatFromTemplate(_:)metode

Dateformattermemiliki metode yang disebut setLocalizedDateFormatFromTemplate(_:). setLocalizedDateFormatFromTemplate(_:)memiliki deklarasi berikut:

func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)

Menyetel format tanggal dari templat menggunakan lokal yang ditentukan untuk penerima.

Pemakaian:

import Foundation

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

7

jika Anda hanya membutuhkan waktu sehari

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

6

Dalam 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

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

Perbarui Tanggal dan Waktu Setiap Detik

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)

    }

Catatan: DateAndTime dalam kode Timer adalah nama Kelas.


5

Saya tahu ada banyak jawaban tetapi saya pikir jawaban saya mungkin lebih nyaman bagi banyak orang

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

Anda bisa mencoba ini

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

Sekarang panggil metode itu dan terima tanggal dengan jam, menit, dan detik

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

4

Anda dapat menggunakan di swift 4 atau 5 seperti di bawah ini

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

Ouput akan seperti di bawah

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

atau bahkan hanyaDate().hour
NoodleOfDeath

1
@NoodleOfDeath yakin. Itu tergantung apakah referensi ke tanggal diperlukan atau tidak.
Leo Dabus

Sangat benar, dan saya kira untuk semua tujuan intensif, Anda ingin menggunakan variabel tanggal yang sama saat membuat komponen tanggal terkait daripada yang baru dibuat untuk setiap komponen tanggal
NoodleOfDeath

3

Memperluas solusi singkat epiiv noiiv , berikut adalah implementasi Swift 3/4 yang lebih ringkas:

Cepat 3/4

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

Juga, memperluas pada ekstensi Leo Dabus kita dapat memiliki:

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 }

}

Dan gunakan seperti ini:

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

tidak perlu mengembalikan opsional ketika mendapatkan sesuatu seperti tahun, bulan, hari, dll ... dari suatu Dateobjek. Metode komponen Kalender Btw lebih tepat untuk komponen tunggal
Leo Dabus

@LeoDabus opsional disebarkan karena DateComponents.yearaccessor adalahInt?
NoodleOfDeath

1
Anda dapat menggunakan metode komponen Kalender yang mengembalikan non opsional. Anda juga dapat memaksa membuka. Itu tidak akan pernah gagal. Tetapi saya akan tetap menggunakan metode komponen elemen tunggal
Leo Dabus

@LeoDabus dimutakhirkan untuk menggunakan componentmetode bagi para
pengakses itu

2

hanya tanggal dalam format tertentu

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

1
Sebagai catatan, saat menggunakan NSDateFormatter, ini adalah objek mahal untuk dibuat sehingga Anda mungkin ingin menggunakan pengambil malas untuk menggunakan kembali NSDateFormatter yang sama jika Anda menggunakan kode ini dalam tabel atau koleksi atau sesuatu. Gaya dan format dapat diubah secara sepele di mana diperlukan tanpa memengaruhi kinerja sebanyak menciptakan kembali ini di mana pun mereka dibutuhkan. Bersulang.!
jcpennypincher

2

Cepat 5

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

dan Fungsi panggilan printTimestamp ()


1

Anda dapat membuat ekstensi aktif Date, dengan cara itu Anda dapat dengan mudah menyebutnya di file lain. Berikut adalah contoh ekstensi tanggal yang menggunakan properti yang dihitung.

Ini akan mencetaknya: "Hari ini, 16:55"

extension Date {

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

        return formatter
    }
}

1

Anda dapat menggunakan Swift4 atau Swift 5 di bawah seperti:

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

output seperti:

2020-03-02

0

Jika Anda perlu memformat jawaban dengan cara tertentu, Anda dapat dengan mudah menggunakan metode ini, default = "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)
   }
}

Mendapatkan kencan hari ini sekarang dapat dilakukan dengan menggunakan

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

tolong jelaskan jawaban Anda.
MrMaavin

itu memperpanjang tanggal void terintegrasi ... itu menempatkan variabel jam dari tanggal void ke nilai int, juga variabel menit, lalu mengembalikan jam dan menit sebagai nilai int. Setelah itu Anda dapat menggunakannya dalam kode apa pun yang Anda inginkan. Misalnya, maka Anda dapat memanggil nilai-nilai itu dari DateComponents () - DateComponents.hour = Date.hour () - ini memberi Anda nilai int dari waktu saat ini.
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

Ini adalah ekstensi SWIFT untuk mendapatkan waktu lokasi perangkat Anda saat ini (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)!
}

Dapatkan waktu sekarang: -

Date().getGMTTimeDate()

0

Bekerja dengan Swift 5 (Xcode 10 & Xcode 11) (dari 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
}

Jika Anda hanya ingin menampilkan tanggal, atur formatter.dateFormat

formatter.dateFormat = "EEEE dd MMMM YYYY"

Untuk hanya menampilkan jam, ubah formatter.dateFormatke

formatter.dateFormat = "HH:mm"

Jangan lupa untuk menambahkan getCurrentDateTime()pada viewDidLoad.


-1

Anda bisa dapatkan dari Dateformatter

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:Date())
print(dateString)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.