Прежде всего, я использую 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
?