คุณจะได้รับวินาทีจาก epoch ใน Swift ได้อย่างไร?
- timeIntervalSince1970
ไม่มีก็เชื่อมโยงโดยตรงกับรายการสำหรับวิธีการที่สวิฟท์:
คุณจะได้รับวินาทีจาก epoch ใน Swift ได้อย่างไร?
- timeIntervalSince1970
ไม่มีก็เชื่อมโยงโดยตรงกับรายการสำหรับวิธีการที่สวิฟท์:
คำตอบ:
คุณสามารถใช้timeIntervalSince1970
ฟังก์ชันของ NSDate ได้
let timeInterval = NSDate().timeIntervalSince1970
สำหรับ Swift 3.0
Date().timeIntervalSince1970
คุณสามารถรับสิ่งนั้นได้โดยใช้สิ่งต่อไปนี้
Int(Date().timeIntervalSince1970)
สำหรับวันที่ปัจจุบันหากคุณต้องการรับวันที่ที่กำหนด
Int(myDate.timeIntervalSince1970)
หากคุณต้องการแปลงจากช่วงเวลา UNIX เป็น Swift Date time คุณสามารถใช้สิ่งต่อไปนี้
let date = Date(timeIntervalSince1970: unixtEpochTime)
1 second = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds
Swift's timeIntervalSince1970
คืนค่าวินาทีด้วยสิ่งที่บันทึกไว้ว่ามีความแม่นยำ "sub-millisecond" ซึ่งฉันสังเกตว่าโดยปกติแล้วจะมีค่าเฉลี่ยเป็นไมโครวินาที แต่บางครั้งก็มีค่าหนึ่งมาตราส่วน (หนึ่งหลักทางขวาของทศนิยม) น้อยกว่าหรือมากกว่า เมื่อส่งกลับมาตราส่วน 5 (5 หลักหลังทศนิยม) ฉันไม่รู้ว่า Swift วางเครื่องหมายท้าย 0 หรือไม่หรือไม่สามารถสร้างความแม่นยำได้ 6 ระดับ แต่เมื่อส่งกลับสเกลเป็น 7 หลักพิเศษนั้นอาจถูกตัดทอนได้เนื่องจากมีความแม่นยำสูงเกินระดับไมโครวินาที ดังนั้นสำหรับค่าที่สอดคล้องและแม่นยำ - จริง:
let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise
อย่างไรก็ตามน่าเสียดายที่ในปี 2038 ตัวเลข 32 บิตจะไม่สามารถใช้กับการประทับเวลา Unix ได้และจะต้องเป็น 64 บิต
let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000
ส่วนขยาย:
extension Date {
var unixTimestamp: Int64 {
return Int64(self.timeIntervalSince1970 * 1_000)
}
}
Date().unixTimestamp
หากคุณไม่ต้องการนำเข้า Foundation เช่นสำหรับการใช้งาน Linux เป็นต้นคุณสามารถใช้สิ่งต่อไปนี้จาก CoreFoundation:
import CoreFoundation
let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970