perl5の日付時刻処理とか
id:karupanerura

14年2月21日金曜日
だれなの???????
@karupanerura
ソシャゲエンジニア
MF
CPAN Author
Perl/JS/Java/Emacs/etc...
ビールのみたい

14年2月21日金曜日
日付時刻処理とは
epoch <-> YMDHMS形式相互変換
timezone処理
加減演算
差分計算
比較演算

14年2月21日金曜日
処理する方法

epochでがんばる!
localtime/gmtimeでがんばる!
日付時刻処理ライブラリをつかう

14年2月21日金曜日
処理する方法

epochでがんばる!
localtime/gmtimeでがんばる!
日付時刻処理ライブラリをつかう

14年2月21日金曜日
どのライブラリを使うか
DateTime
Time::Piece
Date::Simple
Time::Moment
etc....

14年2月21日金曜日
DateTime
YMDHMSをベースに計算
加減演算が正確かつ柔軟に出来る
が遅い

仕様が分かりにくい部分もあるが慣れ次第
枯れていて安心して使える
Perl5の標準的な日付処理ライブラリ

14年2月21日金曜日
基本的なつかいかた

perldoc DateTime

14年2月21日金曜日
くわしいつかいかた

perldoc DateTime

14年2月21日金曜日
DateTimeの罠(1)

引用元: http://blog.64p.org/entry/20070904/1188877834

14年2月21日金曜日
DateTimeの加減算
DateTime::Durationに移譲されている
月末をどのように処理するかを指定可能
wrap mode (default)
月末を跨ぐ
limit mode
月末を超えたら月末にあわせる
preserve mo...
DateTimeの罠(2)
$datetime->add(...)
$datetime自身が書き換わる
cacheしにくい
常にcache値のcloneを返すなどで対処

14年2月21日金曜日
Time::Piece
秒をベースに計算
月/年の加減演算などは正確性に欠ける
秒ベースで計算するので高速に動作する

仕様が分かりにくい部分もあるが慣れ次第
1.20未満に致命的なバグがある
Perl5の新標準的な日付処理ライブラリ

14年...
基本的なつかいかた

perldoc Time::Piece
perldoc Time::Seconds

14年2月21日金曜日
くわしいつかいかた

perldoc Time::Piece
perldoc Time::Seconds

14年2月21日金曜日
Time::Pieceの罠(1)
localtime + ONE_DAY
localtime(+ ONE_DAY)と解釈される
localtime() + ONE_DAY
Time::Piece->strptime(...)
GMTで解釈される...
Time::Pieceの罠(2)
localtime() + ONE_MONTH
1ヶ月くらいの秒数が加算される
だいたい1ヶ月後くらいの日付がわかる
localtime() + ONE_YEAR
1年くらいの秒数が加算される
だいたい1年後く...
Date::Simple
日をベースに計算
日付演算に特化したライブラリ
epochベースと同様シンプルなので高速

timezoneが統一されている状況で便利
日付の比較だけでもDateTimeより約150%高速

日付演算だけで十分な状況で...
Date::Simpleの罠

特にハマった事ない
なにかあったら教えて下さい!

14年2月21日金曜日
Time::Moment
秒をベースに計算
秒ベースで計算するので高速に動作する
しかし加減演算が正確に出来る

preview releaseな新興勢力(現在: v0.14)
同氏(CHANSEN)作の c-dt がベース
Cで実装された日付...
※まだprojectで使ったことないです

14年2月21日金曜日
ここがイケてる(1)
objectがimmutable
$tm->plus_hour(3) とかカジュアルに
cacheしやすい
(plus|minus)_(hour|year)が正確
DateTime::Durationのlimit mode...
ここがイケてる(2)
Serializeのサポート
serialize方法を利用者が考えなくて良い
timezoneはoffsetで指定
タイムゾーン名を管理しない
DateTime::TimeZoneとの併用で
なんかめっちゃ高速
Time:...
だいぶイケてるきがする!!

14年2月21日金曜日
もっと便利にしたい
strptime相当の機能が無い
from_stringはフォーマット固定
用途によっては十分?
DateTime::TimeZone 依存したくない?
Time::Zone的なモジュールがあるといい?

14年2月21日金...
Time::Strptime
拙作(githubのみ)
PurePerlでちょびちょび作ってる
epochを返すstrptime(3)っぽい機能を提供
localeどうしよう?
timezone指定どうしよう?
そもそも必要?
14年2月21日...
Time::Strptime::libc
拙作(githubのみ)
libcのstrptime(3)/mktime(3) で同様の機能
windowsで使えない?
なんでCPANにこういう感じのないの?
深遠な理由があるの?

14年2月21日...
まとめ
罠にきをつけよう
ライブラリの仕様はちゃんと理解して使う
Time::Moment便利そう
がんがん使おう
ビールのみたい

14年2月21日金曜日
Upcoming SlideShare
Loading in …5
×

perl5の日付時刻処理とか

2,016 views

Published on

Yokohama.pm #10

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,016
On SlideShare
0
From Embeds
0
Number of Embeds
586
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

perl5の日付時刻処理とか

  1. 1. perl5の日付時刻処理とか id:karupanerura 14年2月21日金曜日
  2. 2. だれなの??????? @karupanerura ソシャゲエンジニア MF CPAN Author Perl/JS/Java/Emacs/etc... ビールのみたい 14年2月21日金曜日
  3. 3. 日付時刻処理とは epoch <-> YMDHMS形式相互変換 timezone処理 加減演算 差分計算 比較演算 14年2月21日金曜日
  4. 4. 処理する方法 epochでがんばる! localtime/gmtimeでがんばる! 日付時刻処理ライブラリをつかう 14年2月21日金曜日
  5. 5. 処理する方法 epochでがんばる! localtime/gmtimeでがんばる! 日付時刻処理ライブラリをつかう 14年2月21日金曜日
  6. 6. どのライブラリを使うか DateTime Time::Piece Date::Simple Time::Moment etc.... 14年2月21日金曜日
  7. 7. DateTime YMDHMSをベースに計算 加減演算が正確かつ柔軟に出来る が遅い 仕様が分かりにくい部分もあるが慣れ次第 枯れていて安心して使える Perl5の標準的な日付処理ライブラリ 14年2月21日金曜日
  8. 8. 基本的なつかいかた perldoc DateTime 14年2月21日金曜日
  9. 9. くわしいつかいかた perldoc DateTime 14年2月21日金曜日
  10. 10. DateTimeの罠(1) 引用元: http://blog.64p.org/entry/20070904/1188877834 14年2月21日金曜日
  11. 11. DateTimeの加減算 DateTime::Durationに移譲されている 月末をどのように処理するかを指定可能 wrap mode (default) 月末を跨ぐ limit mode 月末を超えたら月末にあわせる preserve mode limit mode && 月末を維持する 14年2月21日金曜日
  12. 12. DateTimeの罠(2) $datetime->add(...) $datetime自身が書き換わる cacheしにくい 常にcache値のcloneを返すなどで対処 14年2月21日金曜日
  13. 13. Time::Piece 秒をベースに計算 月/年の加減演算などは正確性に欠ける 秒ベースで計算するので高速に動作する 仕様が分かりにくい部分もあるが慣れ次第 1.20未満に致命的なバグがある Perl5の新標準的な日付処理ライブラリ 14年2月21日金曜日
  14. 14. 基本的なつかいかた perldoc Time::Piece perldoc Time::Seconds 14年2月21日金曜日
  15. 15. くわしいつかいかた perldoc Time::Piece perldoc Time::Seconds 14年2月21日金曜日
  16. 16. Time::Pieceの罠(1) localtime + ONE_DAY localtime(+ ONE_DAY)と解釈される localtime() + ONE_DAY Time::Piece->strptime(...) GMTで解釈される localtime->strptime(...) 14年2月21日金曜日
  17. 17. Time::Pieceの罠(2) localtime() + ONE_MONTH 1ヶ月くらいの秒数が加算される だいたい1ヶ月後くらいの日付がわかる localtime() + ONE_YEAR 1年くらいの秒数が加算される だいたい1年後くらいの日付がわかる 14年2月21日金曜日
  18. 18. Date::Simple 日をベースに計算 日付演算に特化したライブラリ epochベースと同様シンプルなので高速 timezoneが統一されている状況で便利 日付の比較だけでもDateTimeより約150%高速 日付演算だけで十分な状況では便利 14年2月21日金曜日
  19. 19. Date::Simpleの罠 特にハマった事ない なにかあったら教えて下さい! 14年2月21日金曜日
  20. 20. Time::Moment 秒をベースに計算 秒ベースで計算するので高速に動作する しかし加減演算が正確に出来る preview releaseな新興勢力(現在: v0.14) 同氏(CHANSEN)作の c-dt がベース Cで実装された日付時刻処理ライブラリ 14年2月21日金曜日
  21. 21. ※まだprojectで使ったことないです 14年2月21日金曜日
  22. 22. ここがイケてる(1) objectがimmutable $tm->plus_hour(3) とかカジュアルに cacheしやすい (plus|minus)_(hour|year)が正確 DateTime::Durationのlimit mode相当 月末の処理方法は選べない 14年2月21日金曜日
  23. 23. ここがイケてる(2) Serializeのサポート serialize方法を利用者が考えなくて良い timezoneはoffsetで指定 タイムゾーン名を管理しない DateTime::TimeZoneとの併用で なんかめっちゃ高速 Time::Pieceの1.5倍~20倍くらい高速 14年2月21日金曜日
  24. 24. だいぶイケてるきがする!! 14年2月21日金曜日
  25. 25. もっと便利にしたい strptime相当の機能が無い from_stringはフォーマット固定 用途によっては十分? DateTime::TimeZone 依存したくない? Time::Zone的なモジュールがあるといい? 14年2月21日金曜日
  26. 26. Time::Strptime 拙作(githubのみ) PurePerlでちょびちょび作ってる epochを返すstrptime(3)っぽい機能を提供 localeどうしよう? timezone指定どうしよう? そもそも必要? 14年2月21日金曜日
  27. 27. Time::Strptime::libc 拙作(githubのみ) libcのstrptime(3)/mktime(3) で同様の機能 windowsで使えない? なんでCPANにこういう感じのないの? 深遠な理由があるの? 14年2月21日金曜日
  28. 28. まとめ 罠にきをつけよう ライブラリの仕様はちゃんと理解して使う Time::Moment便利そう がんがん使おう ビールのみたい 14年2月21日金曜日

×