Используйте структуру или класс для возвращаемого значения. Используя std::pair
может работать на данный момент, но
Возврат структуры с самодокументированием членских имен переменной, вероятно, будет менее склонным к ошибке для любого использующего Вашу функцию. Надев мою шляпу коллеги на мгновение, Ваш divide_result
структура легка для меня, потенциального пользователя Вашей функции, сразу понять после 2 секунд. Бездельничание с ouput параметрами или таинственными парами и кортежами заняло бы больше времени для прочтения и может использоваться неправильно. И скорее всего даже после использования функции несколько раз я все еще не буду помнить правильного порядка аргументов.
localize
просто предполагает, что наивное datetime, которое вы передаете, является «правильным» (за исключением того, что вы не знаете часовой пояс!), И поэтому просто устанавливает часовой пояс, никаких других настроек.
Вы можете (и это желательно ...) внутренне работают в формате UTC (а не с наивными датами времени) и используйте replace
, когда вам нужно выполнить ввод-вывод времени дат локализованным способом ( normalize
будет обрабатывать DST и тому подобное).
Этот класс DstTzInfo используется для часовых поясов, где смещение от UTC изменяется в определенные моменты времени. Например (как вы, вероятно, знаете), многие местоположения переходят на «летнее время» в начале лета, а затем обратно на «стандартное время» в конце лета. Каждый экземпляр DstTzInfo представляет только один из этих часовых поясов, но методы «локализовать» и «нормализовать» помогут вам получить правильный экземпляр.
Для Абиджана был только один переход (согласно pytz), и это было в 1912:
>>> tz = pytz.timezone('Africa/Abidjan')
>>> tz._utc_transition_times
[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1912, 1, 1, 0, 16, 8)]
Объект tz, который мы получаем из pytz, представляет часовой пояс до 1912 года:
>>> tz
<DstTzInfo 'Africa/Abidjan' LMT-1 day, 23:44:00 STD>
Теперь взглянув на два ваших примера, вы увидите, что когда вы вызываете tz.localize (d), вы делаете НЕ ] добавьте этот часовой пояс до 1912 года к вашему наивному объекту datetime. Предполагается, что указанный вами объект datetime представляет местное время в правильном часовом поясе для этого местного времени , который является часовым поясом после 1912 года.
Однако во втором примере с использованием d.replace (tzinfo = tz), ваш объект datetime должен представлять время в часовом поясе до 1912 года. Вероятно, вы не это имели в виду. Затем, когда вы вызываете dt.normalize, он преобразует это в часовой пояс, который является правильным для этого значения datetime, то есть часовой пояс после 1912 года.