Как я могу исключить время из даты

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

Что такое part.releaseDate?

matt 04.09.2024 16:12

дата, полученная из API

AlTheBeast 04.09.2024 16:13

Вы хотите, чтобы формат даты всегда был «4 сентября 2024 г.» или вы хотите, чтобы этот формат отображался, например, в Великобритании, а затем отображался «4 сентября 2024 г.» в США? Обычно мы хотим локализовать форматы даты в соответствии с настройками устройства, например. dateStyle из .long и timeStyle из none, и не устанавливайте dateFormat). Ключевым моментом является использование этого средства форматирования при выполнении строковой интерполяции дат в Text, например, Text("Release Date: \(date, formatter: formatter)").

Rob 05.09.2024 07:21
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы неправильно используете форматировщик даты. 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, в дату, а другой (этот) для преобразования этой даты в строку для представления. Но вы показали недостаточно кода, чтобы я мог это понять.

Обратите внимание, что такое использование вычисляемого свойства для создания средства форматирования даты является неправильным, поскольку вы будете получать новый экземпляр средства форматирования даты каждый раз, когда к нему обращаются. Средства форматирования даты стоят дорого. Здесь вам нужно статическое свойство, которое инициализируется только один раз.

matt 04.09.2024 16:48

Мне нужны были два форматтера, большое спасибо.

AlTheBeast 04.09.2024 17:48

Да, dateDecodingStrategy используется для преобразования строки в JSON в объект Date, а затем форматировщик, используемый при интерполяции строки Text, для форматирования Date в формат пользовательского интерфейса. Но не используйте вычисляемое свойство для средства форматирования даты. Используйте статическое свойство, инициализируемое замыканием, а не вычисляемое свойство. Первый инициализирует его один раз замыканием, а второй выполняет дорогостоящий процесс создания нового средства форматирования каждый раз, когда вы ссылаетесь на это вычисляемое свойство.

Rob 05.09.2024 07:28

Другие вопросы по теме