Я анализирую фиксированный формат даты. Здесь я разбираю дату, которая не существует, поэтому я ожидаю получить nil
, возвращенную из средства форматирования даты, и вот что я получаю:
let currentCal = DateFormatter()
currentCal.locale = Locale(identifier: "en_US_POSIX")
currentCal.timeZone = TimeZone(identifier: "America/Chicago")!
currentCal.dateFormat = "yyyy-MM-dd HH:mm:ss"
currentCal.date(from: "2010-03-14 02:15:00") // => nil
( В 2010 году, летнее время Время началось в Чике go 14 марта , поэтому часы были перенесены с 1:59:59 до 3:00:00. 2:15 утра не произошло в тот день.)
Однако, если я установлю календарь явно, я получу дату:
let specifiedCal = DateFormatter()
specifiedCal.calendar = Calendar(identifier: .gregorian)
specifiedCal.locale = Locale(identifier: "en_US_POSIX")
specifiedCal.timeZone = TimeZone(identifier: "America/Chicago")!
specifiedCal.dateFormat = "yyyy-MM-dd HH:mm:ss"
specifiedCal.date(from: "2010-03-14 02:15:00") // => a Date
С тех пор я узнал, что языковой стандарт включает в себя информацию о календаре, поэтому мне не нужно его устанавливать. Тем не менее, я не могу найти никаких указаний в документации или заголовочном файле NSDateFormatter
, который объясняет, что происходит. Интуитивно кажется, что это не должно иметь никакого значения, так почему изменение в поведении?