Добрый вечер.
Если верить этой информации, то Вы получаете правильное время, то есть минус три часа.
Чтобы получить нужное Вам, замените "плюс" на "минус" и получите искомые "24-05-2018 21:38"
Получается, что formatter работает не совсем так, как было бы логично.
Он считает, что переданное ему время - в часовом поясе +3 и конвертирует его в GMT
... а было бы логично посылать ему время в GMT, а на выходе получать время с учетом таймзоны... как-то так.
Конечно, можно плюс на минус заменить, но тогда мне придется прописать formatter->timeZone = 'Etc/GMT-3'
...а это совершенно "не тот" временной пояс...
Всё-таки, я "недопонял" логику :)
Артур Косиков, посмотрите внимательно информацию по ссылке. Formatter работает правильно. Etc/GMT+3 Thu-24-May-2018 16:59:04 -03
Обратите внимание на последнюю цифру "-03"