将UTC本机日期时间转换为pymongo的Eastern tine本地日期时间

时间:2014-02-28 19:31:12

标签: python timezone pymongo pytz

我需要查询一个mongodb,它将日期保存在本地时区(东部),但我正在使用UTC。如何为pymongo将UTC本机日期时间转换为Eastern tine native datetime,以节省夏令时?

4 个答案:

答案 0 :(得分:1)

经过一点点调整之后,我找到了this question,这让我得到了答案。

  1. 将UTC时区设置为本机UTC日期时间
  2. 将其转换为东部时间
  3. 获取UTC的偏移量作为timedelta
  4. 将其添加到原始日期时间
  5. ET = pytz.timezone("America/New_York")
    
    def utc_to_et(utcdt):
        utc_with_tz = utcdt.replace(tzinfo=pytz.UTC)
        offset = utc_with_tz.astimezone(ET).utcoffset()
        return utcdt + offset
    

答案 1 :(得分:1)

将表示UTC时间的天真日期时间对象转换为不同的时区:

from datetime import datetime
import pytz

tz = pytz.timezone('US/Eastern') #NOTE: deprecated timezone name

naive_utc_dt = datetime.utcnow()                # naive datetime object
utc_dt = naive_utc_dt.replace(tzinfo=pytz.utc)  # aware datetime object
east_dt = utc_dt.astimezone(tz)                 # convert to Eastern timezone
naive_east_dt = east_dt.replace(tzinfo=None) #XXX use it only if you have to

注意:如果源时区不是UTC,则应使用.localize().normalize()方法。

pytz允许您处理给定区域的utc偏移更改(不仅仅是由于DST):今天,过去(许多库在这里失败)。

答案 2 :(得分:0)

我不确定这是不是你的意思:

http://docs.python.org/2/library/datetime.html#datetime.datetime.astimezone

它允许您将 datetime 从一个时区更改为另一个时区。

答案 3 :(得分:0)

另请注意,如果Mongo连接没有打开,因为时区知道你只是从数据库中获得了天真的日期时间。

from pymongo import Connection
# Create a timezone aware connection
connection = Connection('localhost', 27017, tz_aware=True)