Неправильный день от даты - PullRequest
0 голосов
/ 12 марта 2019

Я ошибаюсь День от даты. Я вставляю, например, formatter.date(from: "14.03.2019"), который является четвергом, а затем formatter.weekSymbols. Я получаю печать на следующий день после этого (пятница)

почему это происходит? Вот мой код `

func returnFormattedDate() -> String {
    let formattedDay = String(format: "%02d.%02d", day, month)
    return "\(formattedDay).2019"
}

func returnWeekDay() -> String? {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd.MM.yyyy"
    formatter.locale = Locale(identifier: "de_DE")
    formatter.timeZone = TimeZone(secondsFromGMT: 0)
    print(returnFormattedDate())

    guard let todayDate = formatter.date(from: returnFormattedDate()) else { return nil }
    print(todayDate) // prints 2019-03-14 00:00:00 +0000

    let nameOfDay = formatter.weekdaySymbols[Calendar(identifier: .gregorian).component(.weekday, from: todayDate)]
    print(nameOfDay) // prints 'Friday' instead of thursday
    return nameOfDay
}

1 Ответ

1 голос
/ 12 марта 2019

Две ошибки в вашем коде.

  1. Вы должны установить часовой пояс
  2. weekday значения: 1 ... 7 (1 = воскресенье, 7 = суббота), но массив weekdaySymbols явно начинается с индекса 0 (weekdaySymbols[0] = Sunday, weekdaySymbols[6] = Saturday). Итак, давайте просто вычтем 1.

let dateString = "14.3.2019"

let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
formatter.locale = Locale(identifier: "de_DE")
// ERROR 1
// you have to set timezone. Since we don't care about time, let's just use UTC.
formatter.timeZone = TimeZone(secondsFromGMT: 0)

let todayDate = formatter.date(from: dateString)!
print(todayDate)

var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0)!

// ERROR 2: you are indexing incorrectly
let nameOfDay = formatter.weekdaySymbols[calendar.component(.weekday, from: todayDate) - 1]
print(nameOfDay)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...