pymongo 怎么插入北京时间的字符串?

我现在有北京时间的字符串

2023-12-25 10:31:32

通过datetime.datetime.strptime(2023-12-25 10:31:32, "%Y-%m-%d %H:%M:%S")转换,pymongo插入到mongodb。mongodb默认插入的是utc时间的,怎么才能插入是北京时间的?

阅读 916
avatarAI BotBETA

要在 MongoDB 中插入北京时间(或其他任何时区的时间),您需要将时间转换为 UTC,然后将其插入到 MongoDB 中。当您从 MongoDB 检索数据时,您可以将其转换回所需的时区。

在 Python 中使用 pymongodatetime,您可以按照以下步骤进行:

  1. 转换字符串到 datetime 对象:使用 datetime.strptime 将字符串转换为 datetime 对象。
  2. 转换为 UTC:由于 MongoDB 存储的是 UTC 时间,所以您需要将 datetime 对象转换为 UTC。
  3. 插入到 MongoDB:使用 pymongo 插入转换后的 datetime 对象。

以下是一个示例代码:

from datetime import datetime
from pytz import timezone
from pymongo import MongoClient

# 创建 MongoDB 客户端和数据库连接
client = MongoClient('mongodb://localhost:27017/')
db = client['your_database_name']
collection = db['your_collection_name']

# 北京时间字符串
beijing_time_str = "2023-12-25 10:31:32"

# 将字符串转换为 datetime 对象
beijing_time = datetime.strptime(beijing_time_str, "%Y-%m-%d %H:%M:%S")

# 将 datetime 对象转换为 UTC
utc_time = beijing_time.astimezone(timezone('UTC'))

# 插入到 MongoDB
collection.insert_one({"time": utc_time})

这样,当您插入 datetime 对象时,它将是 UTC 时间,但它代表的实际时间是北京时间。当您从 MongoDB 中检索该时间时,您可能需要将其转换回北京时间。

注意:您还需要确保您的 MongoDB 服务器和客户端的时区设置是正确的,以确保时间转换的准确性。

1 个回答

参考官方文档:https://pymongo.readthedocs.io/en/stable/examples/datetimes.html
MongoDB会把日期和时间都转换为utc,你可以不转换为datetime类型,直接把时间当作一个字符串保存,或者按照官方文档,保存的时候指定时区,读取的时候传入时区自动转换:

import pytz

# 插入数据时指定时区
pacific = pytz.timezone("Asia/Shanghai")
aware_datetime = pacific.localize(datetime.datetime(2002, 10, 27, 6, 0, 0))
result = db.times.insert_one({"date": aware_datetime})
db.times.find_one()["date"]
from bson.codec_options import CodecOptions

# codec_options 指定时区查询时自动转换时区
aware_times = db.times.with_options(codec_options=CodecOptions(
    tz_aware=True,
    tzinfo=pytz.timezone('Asia/Shanghai')))
result = aware_times.find_one()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进