Date Formatter не показывает правильный день месяца при использовании формата "DD" - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь отобразить сегодняшнюю дату как 26 марта, но при использовании этого кода она отображается как "85 марта".

let formatter = DateFormatter()
formatter.dateFormat = "MMMM DD"
let defaultTimeZoneStr = formatter.string(from: Date())

1 Ответ

3 голосов
/ 27 марта 2019

Проблема в том, что вы используете неправильный формат даты. D для "дня года". Правильный символ «день месяца» в нижнем регистре d Именно поэтому вы получаете 85 вместо 26.

Еще один момент, на который следует обратить внимание, это установить фиксированный языковой стандарт на "en_US_POSIX", если вы не хотите, чтобы в строке даты отображались пользовательские настройки и языковой стандарт.

Обратите внимание, что вы должны использовать собственный тип Swift Date вместо NSDate.

Если ваше намерение состоит в том, чтобы отображать его с учетом языкового стандарта и настроек пользователя, вам следует использовать форматер даты dateStyle (короткое, среднее, длинное или полное) Как получить текущую дату в коротком формате в Swift

Если вам нужен локализованный формат даты, ограниченный только месяц и день, вы можете использовать DateFormatter метод dateFormat из шаблона:

class func dateFormat(fromTemplate tmplate: String, options opts: Int, locale: Locale?) -> String?


let df = DateFormatter()
df.dateFormat = DateFormatter.dateFormat(fromTemplate: "MMMMdd", options: 0, locale: .current)
df.string(from: Date())  // "March 27"
...