1

Facebookのstart_timeの時間を変換しようとしています。Facebook のドキュメントによると、Facebook は ISO-8601 文字列を使用して、UTC からのオフセット形式の正確な時刻を記述します。

%Y-%m-%dT%H:%M:%S+OFFSET

API から抽出すると、例 1 のように現地時間として出力されるイベントもあれば、例 2 のようにユーザーの時間として出力されるイベントもあります (イベント 1 と 2 の場所は同じであることに注意してください)。

例 1) eid = 163113227202707、start_time = 2013-06-18T22:00:00-0700

例 2) eid = 590809384285866、start_time = 2013-06-17T01:00:00-0300

夏時間も含めて、現地のイベント時間を使用する必要があります。

次の形式の約 1500 都市のテーブルを作成しました。

city    timezone    dst offset
Abidjan GMT     +0000
Abuja   WAT     +0100
Accra   GMT     +0000
Adama   EAT     +0300
Addis Ababa EAT     +0300
Agadez  WAT     +0100
Agadir  WEST    DST +0100
Al Jizah    EET     +0200
Alexandria  EET     +0200
Algiers CET     +0100
Ali Sabieh  EAT     +0300
Antananarivo    EAT     +0300
Antsirabe   EAT     +0300
Arusha  EAT     +0300
Asmara  EAT     +0300
Bafatá  GMT     +0000
Bamako  GMT     +0000
Bambari WAT     +0100
Bamenda WAT     +0100
Bangui  WAT     +0100
Banjul  GMT     +0000
Bata    WAT     +0100
Beira   CAT     +0200
Benghazi    CST DST +0200
Benin City  WAT     +0100
Berbérati   WAT     +0100

ただし、これは静的であるため、夏時間には役立ちません。

pytz に関するドキュメントを読んでも、都市名に基づいてタイムゾーンを照会する方法がわかりません。これは可能ですか?

基本的に、次の疑似コードを作成しようとしています。

start_time = 2013-06-17T01:00:00-0300

UTC_start_time = normalize_time_to_UTC(start_time)

offset = lookup_offset_given_city_and_UTC(city, UTC)

local_start_time(UTC_start_time, offset)

アップデート:

最初に、次のように文字列を解析して、Facebook から提供されたオフセットに基づいて時間を正規化します。

def fql_local_time_to_utc(start_time):

    if len(fql_timestamp) < 20:
        return fql_timestamp

    else:
        timestamp = fql_timestamp[:19]
        sign = fql_timestamp[19]
        hours = fql_timestamp[20:22]
        minutes = fql_timestamp[22:24]
        offset = int(hours)+int(minutes)/60

        if sign =="+":
            offset = -offset

        timestamp_object = datetime.datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S')
        utc_object = timestamp_object + datetime.timedelta(hours = offset)

        return utc_object 

次に、venue_id の location_city を検索し、「pytz_timezone_name」という列を手動で追加した上記のデータベースと一致させようとします。結合クエリを介して関連するタイムゾーンを見つけた後、次のコードを適用します。

try:           
    tz = db.fetchone()["pytz_timezone_name"]
    tz_object = timezone(tz)
    local_event_time = timezone('UTC').localize(utc_time).astimezone(tz_object)
    local_time = local_event_time.strftime('%Y-%m-%dT%H:%M:%S%z')

except:

    local_time = start_time
4

1 に答える 1