在 rethinkdb 中插入 python datetime 的最佳方法是什么



RethinkDB是一个非常棒且非常方便的NoSQL数据库引擎。我正在寻找插入 Python 日期时间对象的最佳方法。RethinkDB 对 UTC 时间戳进行了跟踪,因此我找到了一个解决方案,可以将我的日期时间对象转换为正确的格式。

我使用这个 litle 函数在某种情况下转换我的日期时间对象 RethinkDB 理解:

import calendar
from datetime import datetime
import rethinkdb as r

def datetime_to_epoch_time(dt):
    timestamp = calendar.timegm(dt.utctimetuple())
    return r.epoch_time(timestamp)
title = u'foobar'
published_at = '2014-03-17 14:00'
# firts I convert 2014-03-17 14:00 to datetime
dt = datetime.strptime(published_at, '%Y-%m-%d %H:%M')
# then I store the result
r.table('stories').insert({
    'title': title,
    'published_at': datetime_to_epoch_time(dt),
}).run()

我目前的时区是欧洲中部时间(格林威治标准时间 + 2 小时)这是将我的日期存储在 rethinkdb 中的好解决方案还是存在更好的解决方案?

感谢您的帮助

Pytz 的例子:

from datetime import datetime
import pytz
import rethinkdb as r

# Init
r.connect('localhost', 28015).repl()
if 'test' in r.db_list().run():
    r.db_drop('test').run()
r.db_create('test').run()
r.db('test').table_create('stories').run()
paris = pytz.timezone('Europe/Paris')
r.table('stories').insert({
    'title': u'Foobar',
    'published_at': paris.localize(datetime.strptime(
        '2014-03-17 14:00', '%Y-%m-%d %H:%M'
    ), is_dst=False)
}).run()
for document in r.table("stories").run():
    print(document['published_at'])
    print(type(document['published_at']))

dt.utctimetuple()不会将朴素的dt转换为UTC时区,即,如果published_at不在UTC中,那么它会返回错误的结果。

如果published_at位于本地时区,因此dt位于本地时区:

from datetime import datetime
import pytz # $ pip install pytz
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone()
aware_dt = tz.localize(dt, is_dst=None)
timestamp = (aware_dt - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()
# ... r.epoch_time(timestamp)

相关内容

  • 没有找到相关文章

最新更新