Python: конвертировать местное время в другой часовой пояс - PullRequest
8 голосов
/ 12 марта 2011

Я хочу преобразовать текущее время в +0900 в Python.

Каков подходящий способ сделать это (при условии, что в модуле времени)?

Я читал это не 't включен в Python, и вы должны использовать что-то вроде pytz.

Я не хочу менять его на серверной или глобальной основе, только в этом одном случае.

Ответы [ 5 ]

9 голосов
/ 18 мая 2015

Пример преобразования данных из UTC в IST

from datetime import datetime
from pytz import timezone

format = "%Y-%m-%d %H:%M:%S %Z%z"

# Current time in UTC
now_utc = datetime.now(timezone('UTC'))
print now_utc.strftime(format)
Output: 2015-05-18 10:02:47 UTC+0000

# Convert to Asia/Kolkata time zone
now_asia = now_utc.astimezone(timezone('Asia/Kolkata'))
print now_asia.strftime(format)
Output: 2015-05-18 15:32:47 IST+0530
9 голосов
/ 14 ноября 2012

Я хочу преобразовать текущее время в +0900 в Python ...
Я не хочу менять его на сервере или глобально, только в этом случае.

Чтобы получить текущее время для +0900 смещения часового пояса от UTC:

from datetime import datetime, timedelta

current_time_in_utc = datetime.utcnow()
result = current_time_in_utc + timedelta(hours=9)

Не используйте осведомленные объекты даты и времени, если только вы не используете библиотеку pytz, иначе вы можете получить неправильные результаты из-за переходов DST и других изменений часового пояса. Если вам нужно сделать некоторую арифметику для объектов datetime; сначала конвертируйте их в UTC.

7 голосов
/ 12 марта 2011

Вместо этого вы можете использовать модуль datetime .Адаптировано с http://docs.python.org/library/datetime.html#datetime.tzinfo.fromutc

from datetime import tzinfo, timedelta, datetime

class FixedOffset(tzinfo):
    def __init__(self, offset):
        self.__offset = timedelta(hours=offset)
        self.__dst = timedelta(hours=offset-1)
        self.__name = ''

    def utcoffset(self, dt):
        return self.__offset

    def tzname(self, dt):
        return self.__name

    def dst(self, dt):
        return self.__dst

print datetime.now()
print datetime.now(FixedOffset(9))

Дает:

2011-03-12 00:28:32.214000
2011-03-12 14:28:32.215000+09:00

Когда я его запускаю (у меня UTC-0500 еще один день, начинается DST)

1 голос
/ 10 октября 2014

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

pip install pytz tzlocal

тогда

from datetime import datetime
from pytz import timezone
import pytz
from tzlocal import get_localzone

#timezones
local = get_localzone()
utc = pytz.utc
cet = timezone('CET')

#get now time in different zones
print(datetime.now(local))
print(datetime.now(cet))
print(datetime.now(utc))

#convert local time now to CET
print(datetime.now(local).astimezone(cet))
print(datetime.now(cet).astimezone(utc))
0 голосов
/ 12 марта 2011

В модуле datetime есть абстрактный базовый класс с именем tzinfo, который контролирует, как datetime.datetime и datetime.time обрабатывают часовые пояса.Вы в основном получаете свой собственный класс для контроля интерпретации часового пояса.Я никогда не использовал это лично, поэтому я не могу сказать больше об этом.

К сожалению, единственные элементы управления часовым поясом, которые я вижу непосредственно в модуле time, работают на глобальном уровне, я считаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...