Python datetime.replace() 在上传到 Firebase Firestore 时表现异常
为了测试,我部署了一个Firebase云函数。当这个函数被调用时,它会在我的Firestore集合中添加一个文档,里面有两个字段,分别包含两个时间。
@https_fn.on_call(region='europe-west1', vpc_connector='connector1', vpc_connector_egress_settings=options.VpcEgressSetting('ALL_TRAFFIC'))
def testing(req: https_fn.CallableRequest):
firestore_client: google.cloud.firestore.Client = firestore.client()
visit_collection = firestore_client.collection('visits')
visit_collection.add(
{
'test1': datetime.now().astimezone(),
'test2': datetime.now().replace(hour=0, minute=0, second=0, microsecond=0).astimezone(),
},
'test'
)
在Firebase控制台的Cloud Firestore中查看文档内容时,我期望文档中字段的值是这样的(如果时间是19:50的话):
test1: 23 March 2024 at 19:50:00 UTC+1
test2: 23 March 2024 at 00:00:00 UTC+1
但是,我在文档中看到的是:
test1: 23 March 2024 at 19:50:00 UTC+1
test2: 23 March 2024 at 01:00:00 UTC+1
1 个回答
0
我用pytz这个包解决了这个问题:
import pytz
from datetime import datetime, time
from firebase_functions import https_fn, options
from firebase_admin import initialize_app, auth, firestore
import google.cloud.firestore
@https_fn.on_call(region='europe-west1', vpc_connector='connector1', vpc_connector_egress_settings=options.VpcEgressSetting('ALL_TRAFFIC'))
def testing(req: https_fn.CallableRequest):
firestore_client: google.cloud.firestore.Client = firestore.client()
visit_collection = firestore_client.collection('visits')
brussels_tz = pytz.timezone('Europe/Brussels')
current_datetime = datetime.now(brussels_tz)
current_date = current_datetime.date()
midnight_brussels = datetime.combine(current_date, time())
midnight_brussels = brussels_tz.localize(midnight_brussels)
visit_collection.add(
{
'test1': current_datetime,
'test2': midnight_brussels,
},
'test'
)