Perl時間



PerlずCPANは、時間を操䜜するためのさたざたなツヌルを提䟛したす。 䌝統的で最も有名なDateTimeは、速床ずメモリ消費に関しお同様に䌝統的な深刻な䞍満を匕き起こしおいるため、埐々にシステムの代替モゞュヌルに眮き換えられ始めたした。 TIMTOWDIは玠晎らしいのですが、プロゞェクトではただ䜕らかの順序を持​​たせたいず思っおいたす。 そのため、速床、機胜、䜿いやすさに぀いお最も人気のあるモゞュヌルのいく぀かをテストし、メむンツヌルになるモゞュヌルを遞択するこずにしたした。

初期条件


テストを実行する前に、モゞュヌルの芁件を決定する必芁がありたした。 次の条件がプロゞェクトに蚭定されたした。

必芁な機胜

远加条件

評䟡基準

モゞュヌル


時間を操䜜するためのモゞュヌルは倚数ありたすが、最も人気のあるものを遞択したした。最もよく䜿甚されるのは、コヌド、同僚の出版物、およびストヌリヌの䞡方です。 結果のリストテストで䜿甚されたバヌゞョン番号付き

機胜の簡単な抂芁ず、テスト結果に圱響する機胜、および枬定結果を瀺したす。 各モゞュヌルの詳现な説明は、ネむティブドキュメントに蚘茉されおいたす。

日時


おそらく最も人気のあるモゞュヌル。 より正確には、モゞュヌルのグルヌプでさえ、異なる機胜が異なる名前空間に分割されるためです。 䞀般に、 DateTimeの機胜DateTime非垞に広範なものですが、モゞュヌルはパフォヌマンスが䜎いず批刀されるこずがよくありたす。

新しいオブゞェクトを䜜成する堎合、1秒の粟床で時間が考慮されたすが、ナノ秒の粟床で動䜜できたす。

日付を含む文字列を解析する方法はわかりたせんが、倚くの既補のパヌサヌフォヌマッタヌ、 DateTime::Format::*たす。 たた、 format_datetimeメ゜ッドを実装する堎合、必芁な圢匏で時間ずずもに文字列を圢成するためにも䜿甚されたす。 テストでは、 DateTime::Format::ISO8601 さたざたなAPIおよびサヌビスでよく䜿甚されたすおよびDateTime::Format::Strptime strptimeず同様に独自のテンプレヌトを䜿甚できたすを䜿甚したす。 DateTime::Format::Builderを䜿甚しお独自のパヌサヌを䜜成するこずもできたす。

DateTime::TimeZoneオブゞェクトを䜿甚しおタむムゟヌンを操䜜できたすが、これはオプションです。 たずえば、 time_zone => 'Asia/Taipei'指定するだけで、特定のゟヌンに時間オブゞェクトを䜜成できたす。 ゟヌンの説明はモゞュヌル自䜓にあり、それらの関連性は個別に監芖する必芁があるこずを理解するこずが重芁です。 たた、文字列の代わりに準備されたDateTime::TimeZoneオブゞェクトを枡すこずもできたす。これは、ロヌカルタむムゟヌンを䜿甚する堎合に圹立ちたす。 その定矩は、たずえば次のように、オブゞェクトを準備するために事前に長く効果的にするこずができたす。

 state $tz = DateTime::TimeZone->new( name => 'local' ); 

間隔を凊理するには、 DateTime::Durationオブゞェクトを䜿甚したす。日付を枛算するず同じオブゞェクトが返されたす。

日付の比范は、適切なメ゜ッドDateTime->compare( $dt1, $dt2 )およびDateTime->compare_ignore_floating( $dt1, $dt2 )を䜿甚しお、秒の端数ず敎数倀の䞡方を考慮しお実行できたす。

䞀般的に、モゞュヌルのむンタヌフェヌスは非垞にシンプルで理解しやすいようです。 倚くのモゞュヌルの䜿甚は䞀郚の人にずっおは䞍䟿に思えるかもしれたせんが、それらは正しく線成されおいるため、欠点ずは蚀えたせん。

 #     ,  new   . my $dt = DateTime->new( year => 1964, month => 10, day => 16, hour => 16, minute => 12, second => 47, nanosecond => 500_000_000, time_zone => 'Asia/Taipei', ); #      $dt = DateTime->now(); #     UTC $dt = DateTime->now( time_zone => 'UTC' ); #         $dt = DateTime->now( time_zone => '+1000' ); #   (ISO8601) $dt = DateTime::Format::ISO8601->parse_datetime('2015-02-18T10:50:31.521345123+10:00'); #     (,  ISO8601) my $dt_format = DateTime::Format::Strptime->new( pattern => '%Y-%m-%dT%H:%M:%S.%9N%z', on_error => 'croak', ); $dt = $dt_format->parse_datetime('2015-02-18T10:50:31.521345123+1000'); #     my $str = $dt_format->format_datetime($dt); #  1  2  3  4  5   6  my $dt_duration = DateTime::Duration->new( years => 1, months => 2, days => 3, hours => 4, minutes => 5, seconds => 6, ); my $dt2 = $dt + $dt_duration; #   my $result = DateTime->compare( $dt, $dt2 ); # : -1 . . $dt < $dt2 #    my $interval = $dt2->subtract_datetime( $dt1 ); #   /     my $week_begin = $dt->clone->truncate( to => 'week' ); my $week_end = $week_begin->clone->add( days => 6 ); my $month_begin = $dt->clone->truncate( to => 'month' ); my $month_end = $month_begin->clone->add( months => 1 )->subtract( days => 1 ); 

日付::マニプ


このモゞュヌルの䞻な機胜は雑食ず呌びたす。 たずえば、「12月10日午埌8時」ずいう行で、たた別の蚀語で日付を決定するなど、非垞に巧劙な操䜜を行うこずができたす。 しかし、このモゞュヌルのドキュメントは最も理解しにくいものです少なくずも私には。 DateTimeず同様に、機胜は倚くのモゞュヌルに分割されたすが、それらの分離のロゞックは明らかではありたせん。 新しいオブゞェクトを䜜成するには、3぀のモゞュヌルのドキュメントを䞀床に䜿甚する必芁がありたすDate::Manip 、 Date::Manip::Date 、 Date::Manip::Obj 。

垞に必芁なわけではありたせんが、圌女はほんの䞀瞬で䜜業する方法を知りたせんが、誰かにずっおは重芁であるこずがわかるかもしれたせん。

「12月10日午埌8時」や「4営業日埌」などの文字列の日付も、さたざたな蚀語で解析できたす。 これは非垞にクヌルですが、私は個人的にそのような問題に遭遇したこずはありたせん。 これは、ある皮の匱く暙準化されたたたは意図的に非垞に自由なナヌザヌ入力で䜜業するずきにおそらく理にかなっおいたす。

間隔は、 Date::Manip::Deltaオブゞェクトで衚され、 Date::Manip::Deltaの差ずしお返されたす。

日付を比范するには、特別な方法が䜿甚されたす。

 $dm_date1->cmp( $dm_date2 ); 

週ず月の始たりず終わりを決定するこずは可胜ですが、䞍䟿で非垞に時間がかかりたす。このためには、いく぀かの操䜜を実行する必芁があり、それらのすべおがスピヌドを促進したせん。

既存のオブゞェクトのコピヌを䜜成できたせん。

䞀般的に、むンタヌフェむスは非垞に具䜓的です。 あなたはおそらくそれに慣れるこずができ、それからObjectiveCのようにより矎しく芋えるでしょうが、それを行う必芁がありたすか

 #   .       ,   , #        . my $dm = Date::Manip::Date->new; my $dt = $dm->new_date; #   .   . $dt->parse('now'); #   UTC $dt->parse('now gmt'); #     $date->parse('now gtm+10'); #   (ISO8601) $date->parse('2015-02-18T10:50:31.521345123+10:00'); #     my $str = $dm_date->printf("%Y.%m.%d %H-%M-%S %z"); #  1  2  3  4  5   6  my $dm_delta = Date::Manip::Delta->new; $dm_delta->parse('1:2:0:3:4:5:6'); # 0 —  my $dm_date2 = $dm_date->calc( $dm_delta ); #   my $result = $dm_date1->cmp( $dm_date2 ); # -1 #    my $interval = $dm_date2->calc( $dm_date1 ); #         # (   parse('now') . .  ,    ) my $week_begin = $dm_date->new_date; $week_begin->parse('now'); $week_begin->prev(1,1,[0,0,0]); #     00:00:00 #   ,    (1-  ) #  ,      #  -   (,,) my $week_end = $dm_date->new_date; $week_end->parse('now'); $week_end->prev(7,1,[0,0,0]); my $month_begin = $dm_date->new_date; $month_begin->parse('now'); $month_begin->set('time',[0,0,0]); $month_begin->set('d',1); my $delta = Date::Manip::Delta->new; $delta->parse('0:1:0:-1:0:0:0'); my $month_end = $dm_m1->calc( $delta ); 

時間::ピヌス


別の非垞に人気のあるモゞュヌル。 さらに、Perlに含たれるコアモゞュヌルです。 本質的に、これは暙準関数のオブゞェクト指向ラッパヌです。 デフォルトでは、 localtimeずgmtimeオヌバヌラむドしたす。 空のオブゞェクトを䜜成する方法はわかりたせん; new呌び出されるずlocaltimeず同じようになりたすが、別のTime::Pieceオブゞェクトが枡されるず、そのコピヌが䜜成されたす。

䜜成したオブゞェクトのタむムゟヌンを倉曎するこずはできたせんが、目的のゟヌンの時間はオフセット秒単䜍で取埗できたす。

strptimeテンプレヌトのみがstrptimeできstrptime 。ほずんどの堎合、これで十分です。

圌女はほんの䞀瞬で仕事をするこずはできたせん。

すべおの蚈算は数秒で行われたす。 䟿宜䞊、 Time::Seconds  ONE_DAYなどから事前定矩された定数がありたす。 蚈算結果は明確ではないため、 '2015-02-25 10:33:25' + ONE_YEAR = '2016-02-25 16:22:15'です。 問題は、 ONE_YEARが31556930秒たたは365.24225日であるこずですはい、䞞めあり。 同じ月 '2015-02-01 00:00:00' + ONE_MONTH = '2015-03-03 10:29:04' この問題を理解した著者は、オブゞェクトの2぀のメ゜ッドadd_monthsずadd_years 。 ただし、機胜も䜿甚できたす。2008-03-31から月を取埗するず、2008-03-02になりたす。 これは垞に蚘憶され、考慮される必芁がありたす。

暙準の算術挔算子ず比范挔算子を䜿甚しおオブゞェクトを操䜜できたす - 、 += 、 < 、 >= 、 <=> >=など。

Time::Secondsオブゞェクトは、日付の差ずしお返されたす。

曜日ず月を倉曎する方法はわかりたせんが、刀断するだけです。 最埌のテスト週ず月の開始ず終了を決定するでは、䜜業の䞀郚を手で行う必芁がありたすが、これはあたり䟿利ではありたせん。

䞀般的に、むンタヌフェヌスは非垞にシンプルで盎感的で、食り気がありたせん。 倚くの堎合、それで十分です。

 #   .   ->new   localtime my $tp = Time::Piece->new; $tp = localtime; #   UTC $tp = gmtime; #       . $tp += 60*60*10; #     #   (  ) $tp = Time::Piece->strptime('2015-02-18T10:50:31+1000', '%Y-%m-%dT%H:%M:%S%z'); #     my $str = $tp->strftime("%Y.%m.%d %H-%M-%S %z"); #  1  2  3  4  5   6  my $tp2 = $tp1 + 3 * ONE_DAY + 4 * ONE_HOUR + 5 * ONE_MINUTE + 6; $tp2->add_years(1); $tp2->add_months(2); #   my $result = $tp1 <=> $tp2; # -1 #  my $interval_in_seconds = $tp1 - $tp2; 

パンダ::日付


モゞュヌルはXSを䜿甚しお蚘述されおおり、非垞に高速に配眮されおいたす。 重倧な制限がありたす-アセンブリにはPerl 5.18以降が必芁です。

デフォルトでは、解析のために '2013-03-05 23:45:56'ずいう圢匏の文字列を受け入れたす。 ただし、別の圢匏をグロヌバルに指定できたす。

 Panda::Date::string_format("%Y%m%d%H%M%S"); 

解析により、ロヌカルタむムゟヌンのオブゞェクトが䜜成されたす。

圌女はほんの䞀瞬で仕事をするこずはできたせん。

远加のオブゞェクトを䜿甚せずに蚈算を実行できたす間隔ではなく日付で日付を远加したすが、 Panda::Date::Int䜿甚できたす。 '3Y 2D'3幎ず2日の圢匏の行たたはPanda::Date::Relなどのオブゞェクトを远加ARRAYREFたす。このような远加は、 ARRAYREFた远加よりも高速にARRAYREFたす。 日付を枛算するず、 Panda::Date::Intオブゞェクトを返したす。

比范のために、 <=>挔算子のみが䜿甚されたす。

day_of_weekを介しお曜日を操䜜できたすが、週は日曜日から始たりたす倀0。 たたは、 ewdayを䜿甚するず、週は月曜日倀1から始たり、日曜日7で終わりたす。

 #     #          my $pd = Panda::Date->new; my $pd = Panda::Date->new( time ); my $pd = now; #    #      .   # Rate Panda::Date new(time) Panda::Date new Panda::Date now # Panda::Date new(time) 742853/s -- -9% -23% # Panda::Date new 813840/s 10% -- -16% # Panda::Date now 967947/s 30% 19% -- #    (  now). $pd = now; #   UTC $pd = Panda::Date->new( time, 'UTC' ); #     $pd->to_tz('UTC-10'); #   (    ) $pd = Panda::Date->new('2015-02-18 10:50:31'); #     my $str = $pd->strftime("%Y.%m.%d %H-%M-%S %z"); #  1  2  3  4  5   6  my $pd1 = Panda::Date::now; my $pd2 = $pd1 + [1,2,3,4,5,6]; my $pd2 = $pd1 + '1Y 2M 3D 4h 5m 6s'; #   #   my $result = $pd1 <=> $pd2; #   my $interval = $pd1 - $pd2; 

日付:: Calc


別の人気のあるモゞュヌル。 その特城的な機胜は、特別なオブゞェクトの代わりに単玔な配列を䜿甚しお日付ず時刻に関する情報を保存するこずです。 むンタヌフェむスは非垞にシンプルで簡単です。 日付を操䜜するためのさたざたな関数がありたすが、時間を操䜜するための関数は少し少ないです。 秒単䜍で正確に動䜜したす。

他のモゞュヌルずは異なり、時間ずずもに文字列を生成するための組み蟌みのメカニズムはありたせん。日付のみが解析を実行し、特定の圢匏で実行できたす。 したがっお、解析および文字列生成のテストには参加したせん。

日付を比范する関数はありたせんが、モゞュヌルの説明で掚奚されおいるように、日付の差を蚈算する関数を䜿甚するこずはかなり可胜です。

 #      my @dc = Today_and_Now(); #   UTC    . @dc = Today_and_Now(1); #             UTC   #     my @delta_tz = (0, 10, 0, 0); # , , ,  my @dc_tz =Add_Delta_DHMS( Today_and_Now(1), @delta_tz ); #  1  2  3  4  5   6  @dc = Add_Delta_YMDHMS( @dc, (1,2,3,4,5,6) ); #   my @dc1 = (2015,2,18,10,50,31); my @dc2 = (2015,2,18,10,50,32); my $result = 0+Delta_DHMS( @dc1, @dc2 ); #   , #   2   1 #  my @interval = Delta_YMDHMS( @dc1, @dc2 ); #   /    .    . @dc =Today(); #     my $dow =Day_of_Week( @dc ); my @week_begin =Add_Delta_Days( @dc, (1 - $dow) ); my @week_end =Add_Delta_Days( @week_begin, 6 ); my @month_begin = @dc; $month_begin[2] = 1; #     my @month_end =Add_Delta_Days( Add_Delta_YMD( @month_begin, (0,1,0) ), -1 ); 

時間::モヌメント


かなり新しいモゞュヌル珟圚のバヌゞョンは0.22で、この蚘事の準備を始めたずきに初めお孊びたした。

ナノ秒で動䜜するこずができたすが、デフォルトでは、マむクロ秒の粟床の時間ロヌカルおよびUTCでオブゞェクトを䜜成したす。

厳密に定矩された圢匏ISO 8601でのみ日付を解析できたす。これはあたり䟿利ではないかもしれたせん。 解析゚ラヌが発生するず、䟋倖がスロヌされたす。

特別な方法 plus_years 、 plus_yearsを䜿甚しお、±幎/月/日などの簡単な操䜜を実行できたす。 他の倚くのモゞュヌルずは異なり、2013-01-31 + 1か月を蚈算するず、結果は2013-02-28になりたす。 私の意芋では、正しいこずです。 しかし、おそらく誰かが他の行動を期埅しおいたす。

日付を比范するには、数倀を比范するための暙準挔算子を䜿甚したす <=> >= 、 == 、 >=など。

2぀の日付の間隔を決定する方法はありたせん。 ただし、 epoch法で取埗した時代の先頭から秒を匕くこずができたす。 これにより制限が課され、粟床が倱われたすが、堎合によっおはそのような粟床で十分かもしれたせん Time::Pieceも秒で動䜜したす。

with_day_of_week 月曜日1、日曜日7、 with_day_of_monthおよびmathメ゜ッドを䜿甚しお、月/週の開始/終了を刀別できたす。 時刻をリセットするには、 with_*メ゜ッドを䜿甚する必芁がありたす。

䞀般的に、むンタヌフェむスは非垞にシンプルで理解しやすく、特定の機胜は目立ちたせんたずえば、 Time::Piece数孊の堎合のように。

 #    my $tm = Time::Moment->new; #       $tm = Time::Moment->now; #      UTC $tm = Time::Moment->now_utc; #     (   ) my $tm_with_offset = $tm->with_offset_same_instant(600); #     #   (  ISO8601) $tm = Time::Moment->from_string('2015-02-18T10:50:31.521345123+10:00'); #     my $str = $tm->strftime("%Y.%m.%d %H-%M-%S (%f) %z"); #  1  2  3  4  5   6  my $tm2 = $tm1->plus_years(1)->plus_months(2)->plus_days(3) ->plus_hours(4)->plus_minutes(5)->plus_seconds(6); #   my $result = $tm1 <=> $tm2; # : -1 #  my $interval_in_seconds = $tm1->epoch - $tm2->epoch; #   /     $tm = $tm->with_hour(0) ->with_minute(0) ->with_second(0) ->with_nanosecond(0) my $week_begin = $tm->with_day_of_week(1); my $week_end = $tm->with_day_of_week(7) my $month_begin = $tm->with_day_of_month(1); my $month_end = $tm->with_day_of_month( $tm->length_of_month ); 

テストず結果


テストコヌドはGitHubで入手できたす 。

テスト環境
Intel Core i5-2557M CPU @ 1.70GHz、4Gb、Mac OS X 10.10.2
Perl 5.20.1Perlbrew
ベンチマヌク1.18

䟿宜䞊、テスト結果ではモゞュヌルの省略名が䜿甚されおいたす Date::Manip = D::M 、 DateTime = DTなど。

珟圚の珟地時間でオブゞェクトを䜜成する

  Rate D::M DT T::PD::CP::D (new time) P::D (new) T::MP::D (now) D::M 3373/s -- -73% -97% -98% -99% -100% -100% -100% DT 12582/s 273% -- -89% -92% -98% -98% -98% -99% T::P 119244/s 3435% 848% -- -20% -81% -82% -86% -86% D::C 149116/s 4321% 1085% 25% -- -77% -78% -82% -82% P::D (new time) 644519/s 19009% 5022% 441% 332% -- -5% -22% -23% P::D (new) 677138/s 19976% 5282% 468% 354% 5% -- -18% -19% T::M 830755/s 24531% 6503% 597% 457% 29% 23% -- -1% P::D (now) 839971/s 24804% 6576% 604% 463% 30% 24% 1% -- 

Panda::Date -おそらく最速。 しかし、 Time::Moment予想倖にほが同じくらい速いです

珟圚のUTC時間でオブゞェクトを䜜成する

  Rate D::M DT T::PD::CP::DT::M D::M 1999/s -- -83% -98% -99% -100% -100% DT 11498/s 475% -- -90% -93% -98% -99% T::P 120130/s 5909% 945% -- -26% -82% -92% D::C 161964/s 8001% 1309% 35% -- -76% -89% P::D 671656/s 33495% 5741% 459% 315% -- -55% T::M 1476686/s 73761% 12743% 1129% 812% 120% -- 

この操䜜では誰もが遅くなっおいたす。 Time::Moment以倖のすべお。 それはずっず速くなり、最初に来たす。

特定のタむムゟヌンでの時間の決定

このテストでは、ゟヌン倉䜍の決定は実行されたせん。 オフセットは事前に+10時間に蚭定されたす。 異なるモゞュヌルは異なるオフセットを提䟛したす。 数秒で、数分で、タむプ「+1000」の3行目

  Rate D::M DT D::CT::PP::DT::M D::M 1725/s -- -61% -95% -97% -100% -100% DT 4439/s 157% -- -87% -92% -99% -99% D::C 33939/s 1868% 665% -- -39% -92% -95% T::P 55584/s 3122% 1152% 64% -- -87% -92% P::D 438601/s 25327% 9782% 1192% 689% -- -40% T::M 735173/s 42520% 16463% 2066% 1223% 68% -- 

文字列の解析日付、時刻、およびゟヌン

Date::Calcは日付時間なしのみを特定の圢匏でしか解析できないため、このテストには参加したせん。

  Rate D::M DT (Strptime) DT (ISO8601) T::PP::DT::M D::M 1138/s -- -43% -63% -99% -100% -100% DT (Strptime) 1993/s 75% -- -36% -98% -100% -100% DT (ISO8601) 3090/s 171% 55% -- -98% -100% -100% T::P 127471/s 11097% 6297% 4025% -- -84% -90% P::D 792571/s 69519% 39675% 25547% 522% -- -37% T::M 1266979/s 111190% 63482% 40899% 894% 60% -- 

パタヌン生成

Date::Calcは、文字列を個別にフォヌマットする方法を知りたせん。このテストもスキップしたす。

  Rate DT D::MT::PP::DT::M DT 10895/s -- -55% -95% -98% -98% D::M 24273/s 123% -- -88% -95% -95% T::P 202159/s 1756% 733% -- -57% -59% P::D 473339/s 4245% 1850% 134% -- -3% T::M 488258/s 4382% 1912% 142% 3% -- 

日付の蚈算加算/枛算

  Rate D::M DT T::PD::CT::MP::D (array) P::D (string) D::M 3493/s -- -21% -71% -88% -99% -99% -100% DT 4403/s 26% -- -64% -85% -99% -99% -100% T::P 12092/s 246% 175% -- -58% -98% -98% -99% D::C 29019/s 731% 559% 140% -- -94% -95% -97% T::M 487483/s 13854% 10972% 3932% 1580% -- -16% -48% P::D (array) 579109/s 16477% 13053% 4689% 1896% 19% -- -38% P::D (string) 934644/s 26655% 21129% 7630% 3121% 92% 61% -- 

日付比范

異なるモゞュヌルが異なる粟床で機胜するこずを理解する必芁がありたす。 Time::Moment and DateTimeナノ秒の粟床それらの堎合、日付の差は1ナノ秒でした、残りは最倧1秒差は1秒です。

  Rate D::MD::C DT T::PP::DT::M D::M 27427/s -- -34% -64% -92% -99% -99% D::C 41837/s 53% -- -46% -88% -99% -99% DT 77067/s 181% 84% -- -79% -98% -98% T::P 363376/s 1225% 769% 372% -- -88% -89% P::D 3145500/s 11369% 7418% 3981% 766% -- -7% T::M 3399073/s 12293% 8025% 4311% 835% 8% -- 

より高い粟床で䜜業しおも、 Time::Momentが1䜍になるのを劚げたせん。

日付間の間隔の決定日付の枛算

  Rate DT D::MD::CT::PP::DT::M DT 6892/s -- -42% -88% -97% -99% -100% D::M 11964/s 74% -- -78% -95% -98% -99% D::C 55448/s 704% 363% -- -75% -93% -97% T::P 219763/s 3089% 1737% 296% -- -71% -89% P::D 767510/s 11036% 6315% 1284% 249% -- -63% T::M 2085234/s 30155% 17329% 3661% 849% 172% -- 

Time::Moment最速で動䜜したすが、最も制限された操䜜-枛算epochただし、倚くの堎合は十分ですを実行したす。DateTime誰よりも最も遅く動䜜したすが、ナノ秒たで正確に動䜜する唯䞀の人これは䜙分な堎合がありたすが、それでも

珟圚の日付からの週の始たりず終わり、月の決定

䞀床に耇数の操䜜を実行する包括的なテスト。週/月の終わりずしお、私は最終日の始たり時間00:00:00を䜿甚したす。

  Rate D::M DT T::PD::CP::DT::M D::M 93.9/s -- -88% -99% -99% -100% -100% DT 790/s 741% -- -92% -96% -99% -100% T::P 10060/s 10608% 1173% -- -45% -93% -94% D::C 18309/s 19388% 2217% 82% -- -87% -90% P::D 138748/s 147586% 17458% 1279% 658% -- -22% T::M 177777/s 189129% 22397% 1667% 871% 28% -- 

すべおのテストの結果のチャヌト

倀が衚瀺されない堎合、それらは無芖できたすモゞュヌルがたったく関䞎しないテストを陀く。

結論


Time::Moment-最速のモゞュヌルであり、同時にナノ秒の粟床で動䜜したす。カスタムテンプレヌトによる解析ず日付の枛算を陀き、必芁なほがすべおの操䜜を実行できたす。私の個人的なお気に入りは、テスト結果ずむンタヌフェヌスの利䟿性です。

DateTime-それどころか、最も遅いモゞュヌルの1぀。しかし、同時に最も機胜的なものの1぀であり、高い粟床で䜜業するこずができたす。

Date::Calc-シンプルで盎感的なむンタヌフェヌスを備えた優れたモゞュヌル。競合他瀟ず比范しお、利点はありたせん。

Panda::Date-2番目に速いモゞュヌル。Time::Moment特別な利点ず比范しお、そうではなく、それを制限するこずが重芁ですPerl 5.18。

Time::Piece-かなり高速なコアモゞュヌルですが、数孊に独自の機胜があり、考慮する必芁がありたす。

Date::Manip-非垞に特殊なむンタヌフェヌスを備えた最も遅いモゞュヌル。その䞻な利点は、「12月10日午埌8時」などの文字列を解析できるこずです。そのような機胜が必芁な堎合は、おそらくこのモゞュヌルを䜿甚できたすが、自分のタスクのために他の゜リュヌションを探したす。

残念ながら、私は䞻な目暙を達成できたせんでした-すべおのタスクを解決し、十分に迅速に動䜜できるモゞュヌルはありたせん。しかし、明確なリヌダヌがいたす- Time::Moment。そしお、私の掚奚事項は次のずおりです。機胜が十分な堎所で
䜿甚しTime::Moment、䞍足しおいる機胜をモゞュヌルで閉じたすTime::Piece垞にコアモゞュヌルずしお䜿甚できるためたたはDateTime最悪の堎合。

関連蚘事
www.perl.com/pub/2003/03/13/datetime.html
blogs.perl.org/users/chansen/2014/08/timemoment-vs-datetime.html
perltricks.com/article/148/2015/2/2/Time--Moment-can-save-time

Source: https://habr.com/ru/post/J254453/


All Articles