ทดสอบกับ Swift 4
รับวันที่และเวลาปัจจุบัน
คุณสามารถรับวันที่และเวลาปัจจุบันได้อย่างง่ายดายเช่นนี้:
let currentDateTime = Date()
แต่Date
เป็นจำนวนจุด 64 บิตลอยวัดจำนวนวินาทีนับตั้งแต่วันที่อ้างอิงวันที่ 1 มกราคม 2001 00:00:00 UTC ฉันสามารถดูหมายเลขนั้นสำหรับวันที่และเวลาปัจจุบันโดยใช้
Date().timeIntervalSinceReferenceDate
ในช่วงเวลาของการเขียนนี้มันกลับมา497626515.185066
อาจไม่ตรงกับสิ่งที่คุณกำลังมองหา อ่านต่อไป
การสร้างวันที่และเวลาอื่น
วิธีที่ 1
หากคุณทราบจำนวนวินาทีก่อนหรือหลังวันที่อ้างอิงคุณสามารถใช้
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
วิธีที่ 2
แน่นอนว่าการใช้สิ่งต่าง ๆ เช่นปีเดือนวันและชั่วโมง (แทนที่จะเป็นวินาทีสัมพัทธ์) จะทำให้Date
ง่ายขึ้น สำหรับสิ่งนี้คุณสามารถใช้DateComponents
เพื่อระบุส่วนประกอบจากนั้นCalendar
สร้างวันที่ Calendar
ให้Date
บริบท มิฉะนั้นจะรู้ได้อย่างไรว่าเขตเวลาหรือปฏิทินใดที่จะแสดงใน
// 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)
เวลาตัวย่อที่โซนอื่น ๆ สามารถพบได้ที่นี่ หากคุณเว้นว่างไว้ค่าเริ่มต้นคือการใช้เขตเวลาของผู้ใช้
วิธีที่ 3
วิธีรวบรัดมากที่สุด ( แต่ไม่จำเป็นต้องดีที่สุด) DateFormatter
อาจจะใช้
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
มาตรฐานทางเทคนิค Unicode แสดงรูปแบบอื่น ๆที่DateFormatter
สนับสนุน
การแสดงวันที่และเวลา
วิธีที่ 1
หากคุณต้องการแสดงส่วนประกอบบางอย่างของวันที่หรือเวลาที่คุณสามารถใช้CalendarUnit
เพื่อระบุส่วนประกอบที่คุณต้องการแยกออก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
ดูคำตอบนี้ด้วย
วิธีที่ 2
วิธีที่ 1 ให้องค์ประกอบแก่คุณ แต่มันเป็นงานที่หนักมากในการจัดรูปแบบตัวเลขเหล่านั้นสำหรับทุกสไตล์ภาษาและภูมิภาค และคุณไม่จำเป็นต้อง สิ่งนี้ได้ทำเพื่อคุณใน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
นี่คือความต่อเนื่องของรหัสข้างต้นที่แสดงตัวเลือกการจัดรูปแบบเพิ่มเติม:
// "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)
อย่างไรก็ตามโปรดจำไว้ว่านี่เป็นภาษาอังกฤษสำหรับภูมิภาคที่กำหนดให้กับสหรัฐอเมริกา สำหรับภาษาและภูมิภาคอื่น ๆ การจัดรูปแบบจะแตกต่างกัน
การศึกษาเพิ่มเติม