Làm cách nào để lấy thời gian (giờ, phút, giây) trong Swift 3 bằng NSDate?


84

Làm thế nào bạn có thể xác định giờ, phút và giây từ lớp NSDate trong Swift 3?

Trong Swift 2:

let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.Hour, fromDate: date)
let hour = components.hour

Swift 3?



Câu trả lời:


164

Trong Swift 3.0, Apple đã loại bỏ tiền tố 'NS' và làm cho mọi thứ trở nên đơn giản. Dưới đây là cách lấy giờ, phút và giây từ lớp 'Ngày' (thay thế NSDate)

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

let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let seconds = calendar.component(.second, from: date)
print("hours = \(hour):\(minutes):\(seconds)")

Như vậy, bạn có thể nhận được kỷ nguyên, năm, tháng, ngày, v.v. bằng cách vượt qua tương ứng.


97

Swift 4.2 & 5

// *** Create date ***
let date = Date()

// *** create calendar object ***
var calendar = Calendar.current

// *** Get components using current Local & Timezone ***
print(calendar.dateComponents([.year, .month, .day, .hour, .minute], from: date))

// *** define calendar components to use as well Timezone to UTC ***
calendar.timeZone = TimeZone(identifier: "UTC")!

// *** Get All components from date ***
let components = calendar.dateComponents([.hour, .year, .minute], from: date)
print("All Components : \(components)")

// *** Get Individual components from date ***
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let seconds = calendar.component(.second, from: date)
print("\(hour):\(minutes):\(seconds)")

Swift 3.0

// *** Create date ***
let date = Date()

// *** create calendar object ***
var calendar = NSCalendar.current

// *** Get components using current Local & Timezone ***    
print(calendar.dateComponents([.year, .month, .day, .hour, .minute], from: date as Date))

// *** define calendar components to use as well Timezone to UTC ***
let unitFlags = Set<Calendar.Component>([.hour, .year, .minute])
calendar.timeZone = TimeZone(identifier: "UTC")!

// *** Get All components from date ***
let components = calendar.dateComponents(unitFlags, from: date)
print("All Components : \(components)")

// *** Get Individual components from date ***
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
let seconds = calendar.component(.second, from: date)
print("\(hour):\(minutes):\(seconds)")

Điều gì sẽ xảy ra nếu tôi nhận được 'Component' is not a member type of 'Calendar'dòng `` let unitFlags ... ''
netigger

1
Những gì bạn đang hỏi tôi không rõ ràng, Làm thế nào bạn có thể thêm loại không phải thành viên vào Calendar.Component? Hãy xem xét ngày của bạn đang theo sau "02/12/15, 16:46" trong đó giây không có sẵn và bạn cố gắng trích xuất giây bằng Thành phần, nó sẽ trả lại cho bạn 0trong trường hợp đó.
Dipen Panchasara

Tôi đã tìm thấy sự cố của mình ... Tôi đã khai báo một cấu trúc có tên Calendarđã can thiệp vào Calendar.Component.
netigger

25
let date = Date()       
let units: Set<Calendar.Component> = [.hour, .day, .month, .year]
let comps = Calendar.current.dateComponents(units, from: date)

21

Swift 4

    let calendar = Calendar.current
    let time=calendar.dateComponents([.hour,.minute,.second], from: Date())
    print("\(time.hour!):\(time.minute!):\(time.second!)")

19

Trong Swift 3, bạn có thể làm điều này,

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

đó chắc chắn là câu trả lời ngắn gọn và đơn giản nhất)
Vlad

5
let hours = time / 3600
let minutes = (time / 60) % 60
let seconds = time % 60
return String(format: "%0.2d:%0.2d:%0.2d", hours, minutes, seconds)

5

Swift 5+

extension Date {
    
    func get(_ type: Calendar.Component)-> String {
        let calendar = Calendar.current
        let t = calendar.component(type, from: self)
        return (t < 10 ? "0\(t)" : t.description)
    }
}

Sử dụng:

print(Date().get(.year)) // => 2020
print(Date().get(.month)) // => 08
print(Date().get(.day)) // => 18 

4

Để hữu ích nhất, tôi tạo chức năng này:

func dateFormatting() -> String {
    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "EEEE dd MMMM yyyy - HH:mm:ss"//"EE" to get short style
    let mydt = dateFormatter.string(from: date).capitalized

    return "\(mydt)"
}

Bạn chỉ cần gọi nó bất cứ nơi nào bạn muốn như thế này:

print("Date = \(self.dateFormatting())")

đây là Đầu ra:

Date = Monday 15 October 2018 - 17:26:29

nếu chỉ muốn thời gian chỉ cần thay đổi:

dateFormatter.dateFormat  = "HH:mm:ss"

và đây là đầu ra:

Date = 17:27:30

và đó là nó ...


2
swift 4

==> Getting iOS device current time:-

print(" ---> ",(Calendar.current.component(.hour, from: Date())),":",
               (Calendar.current.component(.minute, from: Date())),":",
               (Calendar.current.component(.second, from: Date())))

output: ---> 10 : 11: 34

1

Điều này có thể hữu ích cho những ai muốn sử dụng ngày hiện tại trong nhiều lớp.

extension String {


func  getCurrentTime() -> String {

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


    let year = calendar.component(.year, from: date)
    let month = calendar.component(.month, from: date)
    let day = calendar.component(.day, from: date)
    let hour = calendar.component(.hour, from: date)
    let minutes = calendar.component(.minute, from: date)
    let seconds = calendar.component(.second, from: date)

    let realTime = "\(year)-\(month)-\(day)-\(hour)-\(minutes)-\(seconds)"

    return realTime
}

}

Sử dụng

        var time = ""
        time = time.getCurrentTime()
        print(time)   // 1900-12-09-12-59
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.