44

自分のタイムゾーンで別のタイムゾーンを適切に表すにはどうすればよいですか? 以下の例は、EDT が私より 1 時間進んでいることがわかっているためのみ機能するため、myTimeZone() の減算のコメントを外すことができます。

import datetime, re
from datetime import tzinfo

class myTimeZone(tzinfo):
    """docstring for myTimeZone"""
    def utfoffset(self, dt):
        return timedelta(hours=1)

def myDateHandler(aDateString):
    """u'Sat,  6 Sep 2008 21:16:33 EDT'"""
    _my_date_pattern = re.compile(r'\w+\,\s+(\d+)\s+(\w+)\s+(\d+)\s+(\d+)\:(\d+)\:(\d+)')
    day, month, year, hour, minute, second = _my_date_pattern.search(aDateString).groups()
    month = [
            'JAN', 'FEB', 'MAR', 
            'APR', 'MAY', 'JUN', 
            'JUL', 'AUG', 'SEP', 
            'OCT', 'NOV', 'DEC'
    ].index(month.upper()) + 1
    dt = datetime.datetime(
        int(year), int(month), int(day), 
        int(hour), int(minute), int(second)
    )                   
    # dt = dt - datetime.timedelta(hours=1)
    # dt = dt - dt.tzinfo.utfoffset(myTimeZone())
    return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, 0, 0, 0)

def main():
    print myDateHandler("Sat,  6 Sep 2008 21:16:33 EDT")

if __name__ == '__main__':
    main()
4

4 に答える 4

39

タイムゾーンを扱う場合はbabel、 andをお勧めします。pytz内部の日時オブジェクトをナイーブで UTC に保ち、書式設定のみのためにタイムゾーンに変換します。単純なオブジェクト (タイムゾーン情報のないオブジェクト) が必要になる理由は、多くのライブラリとデータベース アダプターがタイムゾーンを認識していないためです。

于 2008-09-22T20:59:40.807 に答える
11

Python 標準ライブラリにはタイムゾーン情報が含まれていません。残念ながら、タイムゾーン データは Python よりもはるかに高速に変更されるためです。これにはサードパーティのモジュールが必要です。通常の選択はピッツです

于 2008-09-22T20:46:08.593 に答える
7

現在のローカルタイムゾーンでは、次のものを使用できます。

>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9

返される値は、UTCの西の秒数です(UTCの東の領域は負の値を取得します)。これは、実際に必要な方法とは逆であるため、* -1

localtime().tm_isdst夏時間が現在有効になっていない場合はゼロになります(ただし、ある地域で夏時間が最近変更された場合、これは正しくない可能性があります)。

于 2009-12-12T13:35:12.613 に答える