2017-05-09 16 views
0

私は変数$nowDateの現在の日付をDateTimeオブジェクトとして保持しています。DateTimeの日付から月、日、年を抽出します

今、私はその変数から月、日、年を引っ張り、それらを自分の変数に割り当てる必要があります。それをどうやってやりますか?

my $nowDate = DateTime->now(time_zone => 'local'); 

答えて

2

最も簡単な方法は、ymd`や家族だけのアクセサへの明示的な呼び出しを行う(またはストレートハッシュ外の値を引く) `ので、明示的に

my $nowDate = DateTime->now(time_zone => 'local'); 

my ($month, $day, $year) = ($nowDate->month, $nowDate->day, $nowDate->year); 
1

DateTimeは、これらの方法、year(YYYY)、month(1-12)、そしてあなたが一桁の月得ることができますday(1-31)

my ($year, $month, $day) = map { $nowDate->$_ } qw(year month day); 

注意を持っています(05ではなく)5のような、5月の日付または日です。アプリケーションが2桁の形式を使用している場合は、map { sprintf "%02d", $nowDate->$_ }が必要になることがあります。

それとも

my ($year, $month, $day) = split '-', $nowDate->ymd;   # 2017-05-09 

または

my ($year, $month, $day) = unpack "A4A2A2", $nowDate->ymd(''); # 20170509 

方法ymdは、セパレータを指定することができますが、デフォルトは-され、たとえば、$nowDateからそれらを引くことができます。ドキュメントを参照してください。

+0

それらを取得することで、構築するために' sprintf'を使用結果、私は 'wantarray'をチェックし、スカラーコンテキストで値のリストを返す良いケースがあると思います。もちろん、このような変更によって、 'my @dmy = $ date-> dmy'という奇妙なコードが壊れることになります。 – Borodin

+0

@Borodinわかりません - ymdは文脈に敏感ではありませんか?これをサブで包むことを意味しますか?私はあなたが "スカラーコンテクストで値のリストを返す_"ことを意味しているとは思っていません。特定のプロジェクトでは、常に「アイデア」を探して、「DateTime」のユーティリティー・サブッジを用意しています。 (質問はあまりにも基本的なものです - 質問者や訪問者がそれを知らない可能性が高いので、これを示したいと思います。 – zdim

+0

私がはっきりしないと申し訳ありません。私はモジュールが書かれている方法を嘆いていた。これは、リストコンテキストで '(YYYY、MM、DD)'を返すようにすると、 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy OPの問題はすぐに起こる。それは理にかなっていますか? – Borodin

関連する問題