SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
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 mode
limit mode && 月末を維持する
14年2月21日金曜日
DateTimeの罠(2)
$datetime->add(...)
$datetime自身が書き換わる
cacheしにくい
常にcache値のcloneを返すなどで対処

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

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

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

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

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

日付演算だけで十分な状況では便利

14年2月21日金曜日
Date::Simpleの罠

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

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

preview releaseな新興勢力(現在: v0.14)
同氏(CHANSEN)作の c-dt がベース
Cで実装された日付時刻処理ライブラリ

14年2月21日金曜日
※まだprojectで使ったことないです

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

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日金曜日

Contenu connexe

Plus de karupanerura

Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freakskarupanerura
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術karupanerura
 
Why we use mruby with Perl5?
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?karupanerura
 
Perlにおけるclass実装パターン
Perlにおけるclass実装パターンPerlにおけるclass実装パターン
Perlにおけるclass実装パターンkarupanerura
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤karupanerura
 
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.karupanerura
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programmingkarupanerura
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockkarupanerura
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LTkarupanerura
 

Plus de karupanerura (20)

KOWAZA for mackerel
KOWAZA for mackerelKOWAZA for mackerel
KOWAZA for mackerel
 
DateTimeX::Moment
DateTimeX::MomentDateTimeX::Moment
DateTimeX::Moment
 
Aniki has come
Aniki has comeAniki has come
Aniki has come
 
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
 
router-simple.cr
router-simple.crrouter-simple.cr
router-simple.cr
 
Why we use mruby with Perl5?
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?
 
はかたの塩
はかたの塩はかたの塩
はかたの塩
 
Gotanda.pmの紹介
Gotanda.pmの紹介Gotanda.pmの紹介
Gotanda.pmの紹介
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
Perlにおけるclass実装パターン
Perlにおけるclass実装パターンPerlにおけるclass実装パターン
Perlにおけるclass実装パターン
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
 
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programming
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
 
dwangocpp1-lt
dwangocpp1-ltdwangocpp1-lt
dwangocpp1-lt
 
engineer-life
engineer-lifeengineer-life
engineer-life
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
 
Hachioji.pm #40
Hachioji.pm #40Hachioji.pm #40
Hachioji.pm #40
 
Hachioji.pm #39
Hachioji.pm #39Hachioji.pm #39
Hachioji.pm #39
 

perl5の日付時刻処理とか