Преобразование часового пояса Python добавляет минуты к часу?

Под «мелким копированием» это означает, что контент словаря не копируется по значению, а просто создается новая ссылка.

>>> a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

Напротив, глубокий копия будет копировать все содержимое по значению.

>>> import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

Итак:

  1. b = a: присвоение задания, сделать a и b указывает на тот же объект , Illustration of 'a = b': 'a' and 'b' both point to '{1: L}', 'L' points to '[1, 2, 3]'. [/g1]
  2. b = a.copy(): Неверное копирование, a и b станут двумя изолированными объектами, но их содержимое по-прежнему имеет одну и ту же ссылку Illustration of 'b = a.copy()': 'a' points to '{1: L}', 'b' points to '{1: M}', 'L' and 'M' both point to '[1, 2, 3]'. [/g2]
  3. b = copy.deepcopy(a): Глубокое копирование, структура и содержание a и b становятся полностью изолированными. Illustration of 'b = copy.deepcopy(a)': 'a' points to '{1: L}', 'L' points to '[1, 2, 3]'; 'b' points to '{1: M}', 'M' points to a different instance of '[1, 2, 3]'. [/g3]
0
задан Martijn Pieters 17 January 2019 в 19:04
поделиться

1 ответ

Вы не указываете дату при создании объекта jj datetime, поэтому используется дата по умолчанию 1900-01-01. Часовые пояса не являются фиксированными объектами; со временем они меняются, и часовой пояс США / Центрального региона использовал другое смещение еще в 1900 году.

Как минимум, используйте недавнюю дату, например, сегодня , например:

# use today's date, with the time from jj, and a given timezone.
datetime.datetime.combine(datetime.date.today(), jj.time(), tzinfo=tzz)

Если вам нужно только время , тогда не создать datetime объекты для их хранения; модуль datetime имеет выделенный объект time(). Я бы также не использовал strftime() для создания объектов из литералов. Просто используйте конструктор для передачи целых чисел:

jj = datetime.time(10, 0, 0)  # or just .time(10)

Другие хорошие правила: Если вам приходится иметь дело с датами с часовыми поясами, попробуйте переместить их в datetime объектов в UTC в тот момент, когда ваш код получает или загружает их. Если у вас есть только время дня, но вам все еще нужна поддержка часового пояса, прикрепите их к сегодняшней дате, чтобы вы получили правильный часовой пояс. Снова конвертируйте в строки как можно позже.

0
ответ дан Martijn Pieters 17 January 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: