20161209
date
コマンドは Gnu coreutils1。
date => epoch
$ date "+%s" -d"2016-12-08 00:00:00"
1481122800
$ perl -MTime::Local -le 'print timelocal(0,0,0,8,12 -1,2016)'
1481122800
$ python -c 'import datetime ; print (datetime.datetime(2016,12,8,0,0,0).strftime("%s"))'
1481122800
timelocal
の年の扱いについては語られつくされてるから、いいでしょ。
epoch => date
$ date "+%Y-%m-%d %T" -d@1481122800
2016-12-08 00:00:00
$ perl -MPOSIX -le 'print strftime "%Y-%m-%d %T", localtime(1481122800)'
2016-12-08 00:00:00
$ python -c 'import datetime ; print (datetime.datetime.fromtimestamp(1481122800))'
2016-12-08 00:00:00
datetime の strftime
について。
Python はプラットフォームの C ライブラリの strftime() 関数を呼び出していて、プラットフォームごとにその実装が異なるのはよくあることなので、サポートされるフォーマット記号全体はプラットフォームごとに様々です。プラットフォームでサポートされているフォーマット記号全体を見るには、 strftime(3) のドキュメントを参照してください。
って事で、%s
とか、 %N
とか実装してない環境もある。
memo
import time
from datetime import datetime as dt
print (int(time.mktime(dt(2016,12,8,0,0,0).timetuple())))
-
BSD date なら
date -r 1481122800 "+%Y-%M-%d %T"
,date -j -f "%Y-%m-%d %T" "2016-12-08 00:00:00" "+%s"
↩