19日に更新してた

アフィリエイトはないよ

Windows 上の python の timestamp

win11 上で jupyter notebook 使っています。

import sys
sys.version

'3.8.12 (default, Oct 12 2021, 03:01:40) [MSC v.1916 64 bit (AMD64)]'

unix time のはじめの方を色々といじってみたところ、

import datetime
datetime.datetime(1970, 1, 1, 0, 0, 0), datetime.datetime.fromtimestamp(0)

>>(datetime.datetime(1970, 1, 1, 0, 0), datetime.datetime(1970, 1, 1, 9, 0))

こんな感じです。ここまでは中の時計の JST に合わせてくれているのだろうなと思うのでいいのですが、

datetime.datetime(1970, 1, 1, 9, 0, 0).timestamp()

>>OSError: [Errno 22] Invalid argument

と出ます。wsl python3 だと 0.0 と返ってきます。*1

import datetime
for d in range(1,3):
    for h in range(24):
        try:
            print(datetime.datetime(1970,1,d,h).timestamp())
        except:
            print(f'1970/1/{d} {h}:00 error')

で調べてみると、

1970/1/1 0:00 error
1970/1/1 1:00 error
1970/1/1 2:00 error
1970/1/1 3:00 error
1970/1/1 4:00 error
1970/1/1 5:00 error
1970/1/1 6:00 error
1970/1/1 7:00 error
1970/1/1 8:00 error
1970/1/1 9:00 error
1970/1/1 10:00 error
1970/1/1 11:00 error
1970/1/1 12:00 error
1970/1/1 13:00 error
1970/1/1 14:00 error
1970/1/1 15:00 error
1970/1/1 16:00 error
1970/1/1 17:00 error
1970/1/1 18:00 error
1970/1/1 19:00 error
1970/1/1 20:00 error
1970/1/1 21:00 error
1970/1/1 22:00 error
1970/1/1 23:00 error
1970/1/2 0:00 error
1970/1/2 1:00 error
1970/1/2 2:00 error
1970/1/2 3:00 error
1970/1/2 4:00 error
1970/1/2 5:00 error
1970/1/2 6:00 error
1970/1/2 7:00 error
1970/1/2 8:00 error
86400.0
90000.0
93600.0
97200.0
100800.0
104400.0
108000.0
111600.0
115200.0
118800.0
122400.0
126000.0
129600.0
133200.0
136800.0

ですので、エラーが出なくなるのは 1970/1/2 の 9 時からです。マイクロセカンドまでは試してないのですが、1秒前まではだめでした。*2

個人的には現時点であまり不都合がないのですけれど、なんとなく試してみて気になったので。

Windowsでマイナス時間はエラーとあったのですが、なんで一日ずれるかなぁ。

*1:ちなみに wsl python3 で datetime.datetime(1970, 1, 1, 0, 0) だと -32400.0 と返ってきます。3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]

*2:なので当然、datetime.datetime(1970, 1, 2).timestamp() もエラーです。3日からOK