Неправильная дата из компонентов

avatar
xytor
8 августа 2021 в 23:38
88
1
0

Итак, это интересно:

po Calendar.default.date(from: DateComponents(year: 2022, month: 1, hour: 16, minute: 1, second: 1, weekday: 1, weekOfMonth: 1))
▿ Optional<Date>
  ▿ some : 2021-12-26 23:01:01 +0000
    - timeIntervalSinceReferenceDate : 662252461.0

Я ожидаю 1 января 2022 года, но получаю 26 декабря 2021 года? Почему оно это делает? Я делаю что-то не так?

Источник

Ответы (1)

avatar
flanker
8 августа 2021 в 23:58
4

Это связано с тем, что компоненты даты, которые вы предоставляете, противоречивы. У вас есть день недели 1 (который, вероятно, будет воскресеньем или понедельником, в зависимости от вашего региона), но 1 января 2022 года — суббота.

(вы также использовали Calendar.default, когда я думаю, что вы имели в виду Calendar.current?)

Если убрать термин weekDay, вы получите правильный ответ:

Calendar.current.date(from: DateComponents(year: 2022, month: 1, hour: 16, minute: 1, second: 1, weekOfMonth: 1))

// "Jan 1, 2022 at 4:01 PM"

Можно также удалить термин weekOfMonth, так как он лишний при указании фактической даты.

xytor
10 августа 2021 в 00:03
0

Я удалил weekOfMonth, и это сработало. Спасибо! Calendar.default существует в созданном мной расширении, которое обычно называется autoUpdatingCurrent.

flanker
10 августа 2021 в 08:31
0

@xytor нет проблем. Было бы признательно, если бы вы могли принять ответ, если вы им довольны.

xytor
12 августа 2021 в 14:14
0

Я не вижу кнопки, чтобы сделать это.