1

$ PYTHONHOME / lib / python2.7 / calendar.pyから、timegmは次のように定義されます。

EPOCH = 1970
_EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal()


def timegm(tuple):
    """Unrelated but handy function to calculate Unix timestamp from GMT."""
    year, month, day, hour, minute, second = tuple[:6]
    days = datetime.date(year, month, 1).toordinal() - _EPOCH_ORD + day - 1
    hours = days*24 + hour
    minutes = hours*60 + minute
    seconds = minutes*60 + second
    return seconds

日数が次のように計算されない理由はありますか?

days = datetime.date(year, month, day).toordinal() - _EPOCH_ORD

前の表現が壊れてしまうケースを誰かが考えることができますか?

4

1 に答える 1

1
datetime.date(year, month, day).toordinal()

day(年と月の組み合わせ)が有効なの一部であることを示す「範囲チェック」datetime.date

datetime.date(year, month, 1)しません-というより、それを必要とするだけで、year有効monthです。

どうやら一部のユーザーはこの「機能」(日をチェックしない)を利用しており、下位互換性のために(Python2.2と!)開発者はこの動作を維持していました。コミット#27881のRaymondHettingerのコメントを参照してください。

PS。calendar.pyを実行すると、この行を変更したコミットを見つけることができます

hg blame cpython/Lib/calendar.py 

hg cloneCPythonリポジトリを使用している場合)。

10940: def timegm(tuple):
11691:     """Unrelated but handy function to calculate Unix timestamp from GMT."""
11691:     year, month, day, hour, minute, second = tuple[:6]
27881:     days = datetime.date(year, month, 1).toordinal() - _EPOCH_ORD + day - 1

次に、コミット#27881の詳細については、 http: //hg.python.org/を検索してください。

于 2012-09-06T18:44:59.493 に答える