Почему Cloud Function использует разные часовые пояса / время? - PullRequest
1 голос
/ 26 февраля 2020

Справочная информация: запуск CF с помощью облачного планировщика: Изображение ниже: он запланирован на 7:00 по времени Австралии / Сиднея и запускает две облачные функции:

enter image description here

Облачная функция: Регионы - это us-central1. Используемый код:

# Global variable:

tz=pytz.timezone('Australia/Sydney')
naive_dt = datetime.now(tz=tz)
since = datetime.strftime(naive_dt - timedelta(1), '%Y-%m-%d') #yesterday's date 
until = datetime.strftime(naive_dt - timedelta(1), '%Y-%m-%d') #yesterday's date 

def honda_reporting_automation(event,context):

    print("New Day")
    print("current Function Execution date time",naive_dt)
    print("since",since)
    print("until",until)

Странное поведение облачной функции: 1. Хотя облачный планировщик запускает задание в 7:00 утра, и я установил синхронизацию сервера с локальной синхронизацией в моем коде, все равно синхронизация исполнение отличается. Это занимает время в США (1 день) (изображение ниже)

enter image description here

Функция 2nd Cloud показывает различное время запуска (разница в 4 минуты от 1-го), хотя и запускается одновременно одним и тем же планировщиком.

enter image description here

При запуске вручную через Cloud Scheduler с опцией «Запустить сейчас» они ведут себя как положено и показывают правильные временные параметры. (изображение 3)

enter image description here

кто-нибудь сталкивался с таким странным поведением? и есть идеи как это решить?

1 Ответ

2 голосов
/ 26 февраля 2020

В чем здесь ошибка? Вы просите, чтобы функция была выполнена в 7:00 AEDT, и она выполняется в это время. Сервер, на котором работает облачная функция, находится в центре США, поэтому журнал, созданный системой для стека-драйвера, будет отражать этот часовой пояс. Поскольку Cloud Functions является продуктом без сервера, вы не можете изменять часовой пояс компьютера, на котором выполняется функция.

Также в соответствии с pytz-документацией вы не конвертируете время правильно.

Вы должны использовать что-то похожее на:

naive_dt = datetime.now(timezone(tz))

вместо:

naive_dt = datetime.now(tz=tz)

Вот пример моего кода:

from pytz import timezone
from datetime import datetime
import pytz

def hello_world(request):
    fmt = "%Y-%m-%d %H:%M:%S %Z%z"
    nowutc = datetime.now(timezone('UTC'))
    now_australia = nowutc.astimezone(timezone('Australia/Sydney'))
    print(now_australia.strftime(fmt))

    request_json = request.get_json()
    if request.args and 'message' in request.args:
        return request.args.get('message')
    elif request_json and 'message' in request_json:
        return request_json['message']
    else:
        return str(now_australia.strftime(fmt))

Журнал:

enter image description here

...