Я пытаюсь сделать некоторые манипуляции с датами со Swift, и я получаю неожиданный результат.Веб-сервис передаст строковую дату, а затем я хочу получить этот месяц и предыдущий месяц.Я использую этот код (с удаленным вводом и тому подобным):
import Foundation
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(identifier: "America/New_York")
formatter.dateFormat = "yyyy-MM-dd"
let date = formatter.date(from: "2018-12-01")!
let prev = Calendar.current.date(byAdding: .month, value: -1, to: date)!
formatter.string(from: date)
formatter.string(from: prev)
Итак, у меня есть действительная дата, а затем я вычитаю из нее месяц.Первая отформатированная дата показывает мое ожидаемое значение 2018-12-01
, но затем во второй строке вместо 2018-11-01
указано 2018-10-31
.
Я нахожусь в PST, который, конечно, на 3 часа опережает EST.Если я добавлю 3 часа, я получу ожидаемые строки.Однако, поскольку строки ввода и вывода были выполнены с помощью средства форматирования с использованием часового пояса, почему я не получаю ожидаемый результат?