まだ Python の datetime で消耗しているの? maya 使おうぜ
Photo by Daniel Mennerich
この記事は Python Advent Calendar 2016 の 24日目の記事です。
当初は SCOOP についての記事を書きたくて、ひたすら SSH 使った分散処理の実行を試していたのですが、一向に動きそうな気配がなく間に合いそうにないため、最近見つけたライブラリの紹介にさせてもらいます。SCOOPでSSH使って動かせた人、救いの手を差し伸べていただければ嬉しいです。
目次
Python の Datetime のここがいけてない
datetime と time の親和性が低い
Python の Datetime 型って time との親和性が全然いけてない。Datetime 型から Unixtimpstamp を得たかったら、こんないけてないコードを書かないといけない。
1 2 3 4 5 |
import time import datetime d = datetime.date(2015,1,5) unixtime = time.mktime(d.timetuple()) |
timetuple
なんてメソッド、かっこ悪くないですか。しかも、このままだと小数点以下の秒数は省略されてしまうので、d.microsecond
を計算に加えなければいけなかったりで、とても不便。その点、RubyのTimeはすごく使いやすいですよね。timeからdatetimeへは datetime.datetime.fromtimestamp
を呼べばなんとかなるのですが。
個人的には、timeモジュールとdatetimeモジュールは一本化してほしい、timeモジュールの存在価値はよくわかるので、datetime側ですべてラップして欲しいと思っていました。
パースメソッドがない
いちいち datetime.datetime.strptime
メソッドで時間フォーマットを書かないといけない。 dateparser
というモジュールもあるが、 datetime
とは別モジュールだし、使い勝手がいまいち。
タイムゾーンの処理
タイムゾーンの管理が環境依存なところ。忘れた頃に嵌まります。
Maya を使おう
Maya のここが良い
- タイムゾーンの管理が優秀
- ISO 8601 と RFC 2822 の両方の相互切り替えに完全に対応
- 文字列のパースが素敵
- Slang的な日時の出力もできる
- Datetime型への切り替えが容易
- 1970年からのepoch time を基準に作られているが、1970年以前にも対応済み
個人的な理解では、epoch time で管理してくれていて、Datetime的な出力を容易にしてくれるイメージです。Maya って名前ですが、マヤ暦とはまったく関係がなさそう。
インストール
いつもの pip で入ります。
1 |
pip install maya |
使い方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
In [1]: import maya In [2]: maya.now() Out[2]: <MayaDT epoch=1482293502.1> In [5]: maya.when("tomorrow") Out[5]: <MayaDT epoch=1482379926.07> In [6]: tomorrow = maya.when("tomorrow") In [7]: tomorrow.slang_date() Out[7]: 'tomorrow' In [8]: tomorrow.slang_time() Out[8]: '23 hours from now' In [9]: tomorrow.iso8601() Out[9]: '2016-12-22T04:12:41.979653Z' In [10]: tomorrow.rfc2822() Out[10]: 'Thu, 22 Dec 2016 04:12:41 GMT' In [11]: tomorrow.datetime() Out[11]: datetime.datetime(2016, 12, 22, 4, 12, 41, 979653, tzinfo=<UTC>) In [12]: maya.parse("2016/12/24") Out[12]: <MayaDT epoch=1482537600.0> In [13]: eve = maya.parse("2016/12/24") In [14]: eve.iso8601() Out[14]: '2016-12-24T00:00:00Z' In [19]: eve = maya.when("2016/12/24", timezone="JST") In [20]: eve.iso8601() Out[20]: '2016-12-23T15:00:00Z' In [25]: import time In [26]: s = maya.MayaDT(time.time()) In [27]: s.datetime(to_timezone=s.local_timezone) Out[27]: datetime.datetime(2016, 12, 21, 13, 38, 52, 899084, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>) |
strftimeとかは一度datetimeをくぐらせないと使えないです。必要になればdatetimeを呼ぶと良さそうです。
まとめ
maya を使えば、ecpoch time を基準としたタイムゾーンの切り替えにも対応したDatetime型を使えます。これで、Unix Timestamp とかの処理で困ることは減りそうです。Pandas とかでも使えたらいいのになぁ。



About Fx-Kirin
2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。
- Web |
- More Posts (410)
Adsense
関連記事
-
-
PYPIへの登録を10秒でできるようになる方法
pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリをインストールするこ
-
-
まだBokehで消耗してるの?これからはPandas-Bokehを使おうぜ
タイトルはあまり気にしないでください。全然、Bokehで消耗する価値があるとは思っています。ただ、最近Pandasの
-
-
swig で foofunction is private と怒られた時。
例えばのエラーとしてはこれ。 問題は、公開する予定のクラスのpublicインスタンス変数にprivateにしなけれ
-
-
絶対ダメ! マルチスレッドでの共通変数のインクリメント演算
デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等
-
-
Interactive Brokers 証券の Python API を利用する
Interactive Brokers 証券とは 日本には珍しく自動売買プラットフォームが提供されいてる証券会社です。
-
-
Quantopian の pyfolio を単利運用に対応させる。
pyfolio は どんなデータを入れても複利運用として計算してしまうので、人によっては望まない検証方法だったりし
-
-
Python x64 & MinGW64 環境の構築
流石に詰まりまくったのでまとめることにする。 MSYS2 をインストール 個人的にこれからメインで使いたいと思っ
-
-
Python の超お手軽のネットワーク分散コンピューティングライブラリSCOOP
SCOOPとは ssh とPython の設定を適切にするだけで、簡単にネットワーク間での分散処理が実行できる。
-
-
Rust で Python の拡張ライブラリ作成 と numpy との性能比較
この記事は Python Advent Calendar 5日目の記事です。遅れてすみません。 Rust で Py
-
-
SQLAlchemy のマイグレーションライブラリ Alembic を使ってみる。
SQLAlchemyの作者が作ったデータベースマイグレーションツール。個人的には、SQLAlchemyは使わないが、
Adsense
NEW ENTRY
-
- Linux Mint 20 での日本語の設定について。
フォントの設定とかはいろいろなところで触れられているので、他にない情報だけ。 TL;DR F
-
- joblib によって謎のバグが起こる
joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消
-
- Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine
My pc was periodically shut down on 7:40 am JS
-
- Ubuntu で仮想ディスプレイを使う
雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c
-
- PYPIへの登録を10秒でできるようになる方法
pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ
Twitter
RSS
カテゴリー
-
人気記事一覧