Дата из Calendar.dateComponents, возвращающих ноль в Swift - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь создать объект Date с днем, месяцем и годом, но функция Calendar возвращает nil.

let calendar = Calendar.current
let date = calendar.dateComponents([.day,.month,.year], from: Date()).date! // <- nil

Как создать объект Date только с днем, месяц и год?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

В качестве дополнения к ответу rmaddy, причина , почему ваш код возвращает nil является то, что вы пытаетесь преобразовать DateComponents в Date без указания Calendar.

Если это преобразование выполняется с помощью календарного метода

let calendar = Calendar.current
let components = calendar.dateComponents([.day, .month, .year], from: Date())
let date = calendar.date(from: components)

или если вы добавляете календарь к компонентам даты

let calendar = Calendar.current
let date = calendar.dateComponents([.day, .month, .year, .calendar], from: Date()).date

тогда вы получите ожидаемый результат.

0 голосов
/ 14 сентября 2018

Если вы хотите удалить часть времени с даты (установите ее на полночь), тогда вы можете использовать Calendar startOfDay:

let date = Calendar.current.startOfDay(for: Date())

Это даст вам полуночное местное время для текущей даты.

Если вам нужна полночь текущей даты для другого часового пояса, создайте новый экземпляр Calendar и при необходимости установите его timeZone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...