Тестували за допомогою 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)
Майте на увазі, що це англійська мова з регіоном, призначеним для США. Для інших мов та регіонів форматування буде виглядати інакше.
Подальше навчання