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