es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué podría estar causando que las marcas de tiempo retrocedan un día al ser insertadas en Firestore utilizando Python?

Tengo un error muy extraño. Tengo datos de eventos con una columna de fechas. Al insertar los datos en una base de datos de Firestore utilizando código de Python, las fechas retroceden un día.

Entonces, mis datos se ven así en mi cuaderno de Python.

Verificaré nuevamente exportándolos a CSV.

Pero en mi consola de Firestore, esa fecha aparece así:

Estas son las funciones de Python que estoy utilizando para cargar en Firestore:

def batch_data(iterable, n=1):
l = len(iterable)
for ndx in range(0, l, n):
yield iterable[ndx:min(ndx + n, l)]

def write_to_firestore(data):

store = firestore.client()

collection_name = "events"

for batched_data in batch_data(data, 499):
    batch = store.batch()
    for data_item in batched_data.iterrows():
        doc_ref = store.collection(collection_name).document()
        batch.set(doc_ref, data_item[1].to_dict())
    batch.commit()
return None

write_to_firestore(events_df)

No puedo, por ninguna razón, entender por qué está adelantando la fecha un día.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que podría haber un problema con la conversión de la zona horaria en tu código de Python. Firestore guarda todas las fechas como marcas de tiempo UTC, por lo que es posible que tu zona horaria local esté causando que las fechas cambien cuando se cargan.

    Una posible solución sería convertir tus fechas locales a UTC antes de subirlas a Firestore. Puedes utilizar el módulo pytz para ello:

    import pytz
    from datetime import datetime
    
    local_tz = pytz.timezone('TU_ZONA_HORARIA')
    utc_tz = pytz.utc
    
    # Convertir fecha local a UTC
    date_string = '2021-01-01'
    local_date = local_tz.localize(datetime.strptime(date_string, '%Y-%m-%d'))
    utc_date = local_date.astimezone(utc_tz)
    
    # Subir fecha UTC a Firestore
    doc_ref = store.collection(collection_name).document()
    batch.set(doc_ref, {'date': utc_date})
    batch.commit()
    

    Alternativamente, puedes intentar establecer explícitamente la zona horaria en la columna de fecha al convertirla a un diccionario:

    events_df['date'] = events_df['date'].dt.tz_localize('TU_ZONA_HORARIA', ambiguous='infer').dt.tz_convert('UTC')
    batch.set(doc_ref, data_item[1].to_dict(date_format='iso'))
    

    Esto asegurará que la zona horaria se convierta correctamente antes de subirla a Firestore.

Comments are closed.