Я имею дело с плохо запрограммированной 3 партией API, которая заставляет меня массировать некоторые данные о дате/времени в Objective C.Как определить, является ли конкретная дата летним временем или нет?
Вместо возвращении даты как абсолютные отметки времени UNIX в UTC, он возвращает даты как форматные строки без информации о часовом поясе. (На самом деле получается, после разговора с одним из их разработчиков, что они фактически хранят дату/время в своей базе данных как строку без информации о часовом поясе, а не как временную метку!). Серверы находятся где-то посередине США, поэтому в настоящее время на CDT, поэтому теоретически я могу просто добавить «CDT» в отформатированные даты и использовать NSDateFormatter (yyyy-MM-dd HH:mm:ss zzz
) для создания NSDate. Однако, в зависимости от времени года, в которое приходит данная дата, это может быть в КНТ или CDT.
Как определить, действует ли летнее время в эту конкретную дату, чтобы я мог добавить правильный часовой пояс и вычислить правильную дату UTC?
Right-- лучшим вариантом является изменение API. К сожалению, я не могу это сделать. Есть ли способ получить NSTimeZone из NSDate? Таким образом, я могу использовать метод isDaylightSavingsTimeForDate:. – Jason
@ Джейсон Будьте очень осторожны. NSDate не имеет ничего общего с NSTimeZone (у Unix-марок есть часовой пояс? Нет, и по той же причине). Часовой пояс относится к дате * formatter *, а не к самой дате. Итак, как я уже говорил выше, просто предположите, что CST (создайте часовой пояс с этим сокращением), установите этот часовой пояс на форматирование и создайте объект NSDate с помощью форматирования. Он будет работать, за исключением повторения одного часа. Если действует летнее время, отрегулируйте NSDate соответствующим образом. – borrrden
Я согласен с тем, что один час повторяется во время перехода на летнее время. Без какой-либо другой информации из API вы можете только догадываться, какая из двух она может быть, и вы можете ошибаться. –