【Python】Arrowを使ってみた

Arrow は JavaScript の Moment.js ぽく使える日付・時間ライブラリです。

Install

$ pip install arrow
$ pip show arrow | grep Version
Version: 0.4.4

Usage

utcnow() で UTC時刻 を取得できます。 to() で timezone を設定できます。
replace() で単位ごとに任意を値を設定したり加算/減算ができます。

import arrow

arrow.__version__ # 0.4.4

local = arrow.utcnow().to('Asia/Tokyo') # 2014-12-27T16:12:41.113472+09:00

local.replace(year=2014, month=6) # 2014-06-27T16:12:41.113472+09:00

local.replace(years=1, months=-1) # 2015-11-27T16:12:41.113472+09:00

Arrow オブジェクトの timestamp 属性にアクセスすることで timestamp が取得できます。
また, formatで指定した書式化ができます。DDD でDay of Year, DD で Day of Month, a でam/pm, ZZZ で timezone が取得できます。

local.timestamp # 1419663354

formatted = local.format('YYYY-MM-DD HH:mm:ss') # 2014-12-27 16:12:41

local.format('DDD D a ZZZ') # 361 27 pm +09:00+0900

Arrow オブジェクト同士にマイナス演算子を適用すると差分が得られます。

def diff(start, end):
	s = arrow.get(start, 'YYYY-MM-DD HH:mm:ss')
	e = arrow.get(end, 'YYYY-MM-DD HH:mm:ss')
	return e - s

d = diff('2014-11-25 08:46:20', formatted)
d.days # 32

span_range() は期間内の指定した単位の開始時刻と終了時刻の Arrow オブジェクトの tuple を返します。

import datetime as dt
start = dt.datetime(2014, 12, 25, 12, 30)
end = dt.datetime(2014, 12, 25, 17, 15)

for tup in arrow.Arrow.span_range('hour', start, end):
	print(tup)

# (<Arrow [2014-12-25T12:00:00+00:00]>, <Arrow [2014-12-25T12:59:59.999999+00:00]>)
# (<Arrow [2014-12-25T13:00:00+00:00]>, <Arrow [2014-12-25T13:59:59.999999+00:00]>)
# (<Arrow [2014-12-25T14:00:00+00:00]>, <Arrow [2014-12-25T14:59:59.999999+00:00]>)
# (<Arrow [2014-12-25T15:00:00+00:00]>, <Arrow [2014-12-25T15:59:59.999999+00:00]>)
# (<Arrow [2014-12-25T16:00:00+00:00]>, <Arrow [2014-12-25T16:59:59.999999+00:00]>)