1. ホーム
  2. スクリプト・コラム
  3. パール

日付と時刻を操作するためのPerlのCPANモジュール10個の紹介

2022-01-28 17:26:07

日付と時刻を操作できることは、ほとんどのプログラミング言語にとって基本的な機能であり、Perlも例外ではありません。しかし、時間に関するより複雑な処理になると、Perlの内蔵機能に圧倒されることが多い。この場合、Perl Comprehensive Collection Network (CPAN) をチェックすると良いでしょう。CPANには、開発者が日付と時刻の操作を効率的に実行できる、すぐに使えるPerlモジュールが多数用意されています。このサイトを見て、あなたの次のプロジェクトに役立つものがあるかどうか、時間をかけて調べる価値があります。

この記事では、日付と時間を操作し、次のタイムゾーンの変換のための基礎を築き、2つのタイムスタンプ間の秒数を計算するためのPerl CPAN上の最も興味深いモジュールを10個挙げていますので、今から見てみましょう。

注:CPANモジュールは、以下に示す方法でインターネットから直接インストールすることができます。

日付::操作

このモジュールは、日付操作モジュールのスイスアーミーナイフと呼ばれています。日付の解析と比較、日付情報の抽出、日付情報の決定、日付と時刻のオフセットの決定、繰り返される日付と時刻の使用、異なる言語での日付の使用などのルーチンを提供します。しかし、他のより専門的なモジュールに比べると動作が遅い。
汎用的な日付操作モジュールが必要で、特に性能にこだわらない場合に使用します。

日付時間

このモジュールは、Perl の DateTime プロジェクトの一部で、"日付と時刻の組み合わせを表す" 基本クラスを提供します。これはカスタムの Date オブジェクトを作成する最も便利な方法で、パース、フォーマット、時間の計算、タイムゾーンの操作のためのモジュールを含んでいます。
一般的には、時間情報のためのローカライズやカスタムストレージコンテナを定義する必要があるときに、新しい日付関連オブジェクトを作成する方法として、このモジュールを使用したいと思います。

時間::フォーマット

日付と時刻の値を再フォーマットすることに関しては、このモジュールは無敵です。日付と時刻の外観を劇的に変えることができる、大量のフォーマットコードをサポートしています。DateTime オブジェクトと Date::Manip 文字列の両方を受け入れ、POSIX の strftime() 関数へのインターフェイスも提供し、参加型コントロールに対応します。
このモジュールは、日付と時刻の値をフォーマットする必要がある場合に使用します(通常、アプリケーションのユーザーに表示する前に)。

時間::インターバル

このモジュールは、時間間隔を扱うのに便利です。2つのタイムスタンプの間の日数、時間、分、秒の合計を計算するルーチンを提供します。また、秒、時間、分といった異なる時間単位への変換も簡単に行うことができます。
2つの日付の値の間の経過時間を計算する必要があるときに、このモジュールを使用します。

日付::変換

このモジュールは、異なる日付フォーマット(太陽暦、ユリウス暦、ユダヤ暦、イスラム暦、絶対年暦)間の変換を行うルーチンを提供します。また、新しい暦のフォーマットに簡単に拡張するためのフックも提供します。
あるカレンダー形式から別のカレンダー形式に変換する必要がある場合に、このモジュールを使用します。

ベンチマーク

このモジュールを使うと、同じコードを複数回実行し、それぞれの実行時間を計算し、得られた平均値を返すことができます。また、あるコードのブロックを一定の時間内に何回実行できるかを見るのにも使用できます。
このモジュールは、パフォーマンスのベンチマーク、コードブロックの実行速度の測定、および最適化の指針となる正確な測定値の収集に使用します。

時間::ノーマライズ

このモジュールは、任意の日付と時刻の値を、計算の実行や保存に使用できる統一された標準表現にフォーマットするルーチンを提供します。入力に対してエラーチェックを行い、個別の時刻や日付の要素を明確なフォーマットで返します。
このモジュールは、入力された日付にエラーがあると思われ、データベースやアプリケーションで使用する前に、それをクリーンアップする必要がある場合に使用します。

正規表現::コモン::時間

このモジュールは、日付と時刻を分析するために使用できる正規表現を作成します。正確な規則と複雑なファジーロジックの両方を使用して、文字列値から日付パターンをキャプチャすることをサポートします。
このモジュールを使って、人間が読める文字列から日付情報を識別して抽出し、機械が読める形式 (ISO 8601 など) に変換します。

MySQL::DateFormat

このモジュールは、日付と数値を MySQL の YYYY-MM-DD フォーマットと理解しやすい文字列との間で相互に変換するルーチンを提供します。このモジュールは、MySQL データベースから日付情報を持つレコードを取得したり、追加したりするときに便利です。
より読みやすい方法で表示するため、または MySQL データベースに挿入する前にユーザーが提供した日付値を修正するために、このモジュールを使用して MySQL の日付/時刻文字列を再フォーマットすることができます。

ネット::タイム

このモジュールは、リモートクライアントから日付と時刻の情報を取得するためのクライアントサイドインターフェースを提供します。これは、アプリケーションがハッカーによる盗聴からシステムを安全に保つために、常に現在の日付と時刻を知っていることを確認したい場合に特に便利です。
このモジュールは、TCP ネットワーク経由でリモートホストから日付/時刻文字列を取得する場合に使用します。

使用例です。

日付と時刻の情報を取得する

方法1

コピーコード コードは以下の通りです。

use POSIX qw(strftime);
localtime(time() - 24*60*60)
strftime "%Y%m%d%k%M%S",localtime $^T;

方法2
コピーコード コードは以下の通りです。

use 5.010;
use POSIX qw(strftime);
# These are core modules in Perl 5.10 and newer
use Time::Piece;
use Time::Seconds;

my $yesterday = localtime() - ONE_DAY;
say $yesterday->strftime('%b %d %Y');