-1

私のスクリプトにはYYYYMMDD、たとえば のような形式で日付パラメーターが渡されます20130227。月曜日かどうか確認する必要があります。はいの場合、過去 4 日間の日付値を取得する必要があります。それ以外の場合は、過去 2 日間の日付値を取得して配列に格納する必要があります。

たとえば、パラメーターが 20130227 月曜日である場合('20130227' '20130226' '20130225' '20130224') 、配列に格納する必要があります。月曜日でない場合('20130227' '20130226') は、配列にのみ格納する必要があります。

これを行うためにどの perl 関数を使用できますか? 私はsolaris 10でperlを使用しています。

4

3 に答える 3

3

すべての標準Perlコマンドが標準Perlコマンドリストにリストされているわけではありません。これは初心者にとって大きな混乱であり、初心者systemがPerlで直接実行できることを実行するために多くのコマンドを使用するのを目にする主な理由です。

そのコマンドにPerlモジュールを含めると、多くのPerlコマンドを使用できます。たとえば、ある場所から別の場所にファイルをコピーしたいがcopy、標準関数としてリストされているPerlコマンドがないとします。多くの人がこれを行うことになります:

 system ("cp $my_file $new_location");

File::Copyただし、欠落しているコピーコマンドを含むと呼ばれる標準のPerlモジュールがあります。

 use File::Copy;

 copy ($my_file, $new_location);

モジュールはPerlに含まれていますが、モジュールとそのFile::Copy使用方法について知っておく必要があります。残念ながら、それらはPerlの主要な部分ですが、多くのPerl初心者向けの本には含まれていません。

私はあなたの混乱があなたがPerlでいくつかのコマンドを探していてそれを見つけられないという事実から来ていると思います。ただし、Time :: Pieceモジュールは、日付操作に使用されるPerl5.10以降の標準のPerlモジュールです。残念ながら、これはオブジェクト指向モジュールであり、オブジェクト指向Perlに精通していないユーザーにとっては構文が少し奇妙になる可能性があります。幸いなことに、使い方はとても簡単です。

オブジェクト指向プログラミングでは、データを含むオブジェクトを作成します。オブジェクト自体を簡単に表示することはできませんが、データのすべての機能が含まれており、さまざまなメソッド(基本的にはサブルーチン)を使用してそのオブジェクトに関する情報を取得できます。

最初に行う必要があるのは、日付の時間オブジェクトを作成することです。

 my $time_obj = Time::Piece->strptime("20130227", "%Y%m%d");

今、$time_objあなたの日付を表します。は20130227日付文字列を表します。は%Y%m%d文字列の形式を表します(YYYYMMDD)。残念ながら、Time::Pieceドキュメントにはフォーマットの仕組みが記載されていませんが、フォーマット文字はUnixのstrftimeマンページに記載されています。

時間オブジェクトを取得したら、あらゆる種類のメソッド(別名サブルーチン)を使用してクエリを実行できます。

if ( $time_obj->day_of_week == 1 ) {
    print "This is a Monday\n";
}

ドキュメントを読んで試してみてください。

于 2013-03-18T19:31:42.480 に答える
1

Perl で日付を処理するための一般的なツールキットはDateTimeモジュールです。文字列形式を出し入れするための膨大な範囲の日付解析オプションが付属しており、曜日などを簡単にクエリできます。

より軽量で高速で推奨される代替手段はDate::ISO8601次のとおりです。形式はそのISO形式に非常に近いですが、変数を少し操作する必要があります。たとえばmy ($yyyy, $mm, $dd) = ( substr($d, 0,4), substr( $d, 4, 2 ), substr( $d, 6, 2 ) );、例から年月と日の文字列を取得してモジュールのコンストラクターにフィードします。

少なくともこれらを試してみてください。行き詰まった場合は、質問にコードを投稿してください。質問に試行錯誤したコードがあれば、誰かがあなたが知らない部分だけを記入することで、はるかに迅速に答えることができます。おそらく、あなたはあなたが望む解決策について、あなたが思っているよりもはるかに多くのことを知っているでしょう!

于 2013-03-18T09:38:07.760 に答える
0

私は彼ら自身に努力をしなかったように見える誰かを助けることに熱心ではありません。だから私はあなたに答えを与えるつもりはないが、Time :: Pieceモジュール(バージョン5.10以降のPerlの標準部分)を見ることをお勧めする。そして、特に、そのstrftime方法。

それはあなたが始めるのに十分なはずです。

于 2013-03-18T11:28:18.853 に答える