Как использовать DateFormatter для создания текущей даты с типом Date? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть такой код:

func getCurrentDate() -> Date {
    let formatter = DateFormatter()
    formatter.dateStyle = DateFormatter.Style.medium
    formatter.timeStyle = DateFormatter.Style.none
    formatter.dateFormat = "dd.MM.yyyy"
    formatter.timeZone = TimeZone(identifier: "GMT")

    //I want for currentDate would be a Date type
    let currentDate = formatter... /// how to convert to date type?
    return currentDate
}

Как вернуть отформатированную текущую дату?Дата функции возвращает дату в этом формате: 2019-02-24 12:04:13 +0000.Но я хочу получить дату в этом формате: 24.02.2019.

Мне нужен тип даты для этого кода:

let differenceOfDate = Calendar.current.dateComponents(Set<Calendar.Component>([.day]),
                                                                  from: getDateFromString(foodDate: getCurrentDateString()),
                                                                  to: foodShelfLife).day

В этом коде я получаю строковую дату и преобразовываю ее в датутип!Я хочу получить тип даты в 1 функции.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Если я не ошибаюсь, здесь есть недоразумение.

Дата не имеет ничего общего с тем, как ее отображать (формат).Упоминание о том, что:

Дата возврата функции даты в этом формате: 2019-02-24 12:04:13 + 0000.

- результат печати Date():

print(Date())

Если вы хотите видеть его как "24.02.2019", то вам следует отредактировать его формат, поэтому getCurrentDate должен вместо этого вернуть строку:

func getCurrentDate() -> String {
    let formatter = DateFormatter()
    formatter.dateStyle = DateFormatter.Style.medium
    formatter.timeStyle = DateFormatter.Style.none
    formatter.dateFormat = "dd.MM.yyyy"
    formatter.timeZone = TimeZone(identifier: "GMT")

    let currentDate = formatter.string(from: Date())
    return currentDate
}

Поэтому:

print(getCurrentDate())

должен дать вам результат 24.02.2019.


Обновление:

Если вы собираетесь работать сdateComponents, вы должны иметь дело с датами, не заботясь о их форматировании.Пример:

let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
let components = Calendar.current.dateComponents(Set<Calendar.Component>([.day]), from: yesterday, to: Date())
print(components) // day: 1 isLeapMonth: false
0 голосов
/ 24 февраля 2019

Почему бы не вызвать функцию календаря следующим образом

let differenceOfDate = Calendar.current.dateComponents(Set<Calendar.Component>([.day]),
                                                              from: Date(),
                                                              to: foodShelfLife).day

Старое решение

Вам нужно изменить функцию, чтобы она возвращала строку (или выполнитьформатирование на более позднем этапе)

func getCurrentDate() -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd.MM.yyyy”
    formatter.locale = Locale(identifier: "en_POSIX_US")

    return formatter.string(from: Date())
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...