Для даты Введите «00/02/02»
Стиль форматирования - гг / мм / дд
Я получаю правильный результат, например, 01.02.2000

Но проблема в том, что при попытке с "00/01/01" получить результат, подобный этому '01 / 01/12100 '

Но я не знаю, почему в этом году будет 12100

Мой код

let str = "00/01/01"

let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yy/MM/dd"
if let showDate = inputFormatter.date(from: str) {
   inputFormatter.dateFormat = "dd/MM/yyyy"
   let resultString = inputFormatter.string(from: showDate)
   print(resultString)
 }

Тип ввода года всегда в формате гг.

0
kamalesh kumar yadav 8 Окт 2018 в 14:50

2 ответа

Лучший ответ

Согласно предложению @MartinR установка inputFormatter.defaultDate на текущую дату или Date (timeIntervalSinceReferenceDate: 0) , он работал нормально

let str = "00/01/01"

let inputFormatter = DateFormatter()
inputFormatter.defaultDate = Date(timeIntervalSinceReferenceDate: 0)
inputFormatter.dateFormat = "yy/MM/dd"
if let showDate = inputFormatter.date(from: str) {
  inputFormatter.dateFormat = "dd/MM/yyyy"
 let resultString = inputFormatter.string(from: showDate)
 print(resultString)
 }
1
kamalesh kumar yadav 8 Окт 2018 в 13:07

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

inputFormatter.timeZone = TimeZone(identifier: "Asia/Kolkata")
//Or
inputFormatter.timeZone = TimeZone(identifier: "Asia/Calcutta") 

Оба они ведут к 01/01/12100.

Фактически, используя формат даты yy/MM/dd hh:mm:ss, все даты, начиная с 00/01/01 00:00:00 и заканчивая 00/01/01 05:29:59, дают годовой компонент 12100. Это связано с тем, что часовой пояс Калькутты смещен на + 05:30 от GMT. Это ошибка.

Установка часового пояса на UTC дает желаемый результат:

inputFormatter.timeZone = TimeZone(identifier: "UTC")  //01/01/2000

Эта ошибка возникает и с другими часовыми поясами:

inputFormatter.timeZone = TimeZone(identifier: "Africa/Addis_Ababa")
inputFormatter.timeZone = TimeZone(identifier: "Europe/Moscow")
inputFormatter.timeZone = TimeZone(identifier: "Asia/Hong_Kong")

Практически все часовые пояса с GMT + чч: мм

1
ielyamani 8 Окт 2018 в 17:05