Прежде всего, я использую API, где дата возвращается мне в виде строки и возвращается мне в формате гггг-ММ-дд, поэтому я хочу получить 4 сентября 2024 года, и мне удалось это сделать, но я могу Не исключайте время из даты.
Мой код DateFormatter;
var newDate:DateFormatter {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yy"
dateFormatter.dateStyle = .short
dateFormatter.timeStyle = .none
return dateFormatter
}
и это дает мне вот это
также, когда я анализирую JSON, который я использую;
decoder.dateDecodingStrategy = .iso8601
Так что же я делаю не так, ребята?
и вот как я использую это в своем коде;
Text("Release Date: \(newDate.date(from: part.releaseDate) ?? Date.now)")
дата, полученная из API
Вы хотите, чтобы формат даты всегда был «4 сентября 2024 г.» или вы хотите, чтобы этот формат отображался, например, в Великобритании, а затем отображался «4 сентября 2024 г.» в США? Обычно мы хотим локализовать форматы даты в соответствии с настройками устройства, например. dateStyle из .long и timeStyle из none, и не устанавливайте dateFormat). Ключевым моментом является использование этого средства форматирования при выполнении строковой интерполяции дат в Text, например, Text("Release Date: \(date, formatter: formatter)").

Вы неправильно используете форматировщик даты. date(from:) назначает дату, а вам нужна строка.
я хочу получить 4 сентября 2024 года
Ваш код, хотя сам по себе довольно неправильный, работает правильно, если вы измените date(from:) на string(from:) и исправите форматтер, если входные данные являются датой:
var newDate:DateFormatter {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "d MMMM yyyy"
return dateFormatter
}
print("Release Date: \(newDate.string(from: Date.now))")
Результат:
Release Date: 4 September 2024
Возможно, вам понадобятся два средства форматирования: один для преобразования данных, поступающих из API, в дату, а другой (этот) для преобразования этой даты в строку для представления. Но вы показали недостаточно кода, чтобы я мог это понять.
Обратите внимание, что такое использование вычисляемого свойства для создания средства форматирования даты является неправильным, поскольку вы будете получать новый экземпляр средства форматирования даты каждый раз, когда к нему обращаются. Средства форматирования даты стоят дорого. Здесь вам нужно статическое свойство, которое инициализируется только один раз.
Мне нужны были два форматтера, большое спасибо.
Да, dateDecodingStrategy используется для преобразования строки в JSON в объект Date, а затем форматировщик, используемый при интерполяции строки Text, для форматирования Date в формат пользовательского интерфейса. Но не используйте вычисляемое свойство для средства форматирования даты. Используйте статическое свойство, инициализируемое замыканием, а не вычисляемое свойство. Первый инициализирует его один раз замыканием, а второй выполняет дорогостоящий процесс создания нового средства форматирования каждый раз, когда вы ссылаетесь на это вычисляемое свойство.
Что такое
part.releaseDate?