2012-04-03 2 views
2

/日フォーマットのlocaltime()年/月までのlocaltime()の出力をフォーマットする方法を疑問に思う

私は、端末から「日付」コマンドを使用して簡単にそれを行うことができたが、私は計算する必要があります私はperlでやる方法を考え出しました。このうち

foreach my $i (0..7) 
{ 
    my $date = localtime(time() - 60*60*24*$i); 
    print "$i day(s) ago: $date\n"; 
} 

プリント:

0 day(s) ago: Tue Apr 3 12:01:13 2012 
1 day(s) ago: Mon Apr 2 12:01:13 2012 
2 day(s) ago: Sun Apr 1 12:01:13 2012 
3 day(s) ago: Sat Mar 31 12:01:13 2012 
4 day(s) ago: Fri Mar 30 12:01:13 2012 
5 day(s) ago: Thu Mar 29 12:01:13 2012 
6 day(s) ago: Wed Mar 28 12:01:13 2012 
7 day(s) ago: Tue Mar 27 12:01:13 2012 

答えて

3

スクリプト:

#!/usr/bin/perl 
use strict; 

foreach my $i (0..7) 
{ 
    my ($d, $m, $y) = (localtime(time() - 60*60*24*$i))[3,4,5]; 
    printf "%d day(s) ago: %d/%d/%d\n", $i, $y+1900, $m+1, $d; 
} 

出力:

0 day(s) ago: 2012/4/3 
1 day(s) ago: 2012/4/2 
2 day(s) ago: 2012/4/1 
3 day(s) ago: 2012/3/31 
4 day(s) ago: 2012/3/30 
5 day(s) ago: 2012/3/29 
6 day(s) ago: 2012/3/28 
7 day(s) ago: 2012/3/27 
+0

素晴らしい、ありがとう。 – jackie

+1

perlfaq4で説明したように、この種の日付計算はあなた自身ではしないでください。 TomTomにどれだけ重要か尋ねてください。 :) –

3

あなたはPOSIXモジュールからPOSIX::strftimeを使用することができます。

perl -mPOSIX -e 'printf POSIX::strftime("%Y/%m/%d",localtime)

+0

感謝!そのモジュールを認識していなかった – jackie

6

日付数学をやっている場合は、右のそれをしないモジュールを使用しています。たとえば、DateTime

use DateTime; 

my $date = DateTime->now; 

foreach my $i (0 .. 10) { 
    $date->subtract(days => 1); 
    say $date->ymd('/'); 
    } 
9

はここPOSIX::strftimeの例です:

use POSIX(); 

my @local = (localtime)[0..5]; 
foreach my $i (0..7) { 
    my $date = POSIX::strftime('%a %b %d %H:%M:%S %Y', @local); 
    print "$i day(s) ago: $date\n"; 
    $local[3]--; 
} 
+1

それはそれを行う特に賢い方法です。 :)どこにでも働くことが保証されていますか?私はそれが何をすべきかについてのいかなる文書も見つけることができなかった。 –

+0

@briandfoy、私はそれが完全に移植可能かどうかわかりませんが、奇妙な値はWindows(Strawberry and Active)、UNIX、Linux上で5.8から5.14までの 'POSIX :: mktime'と' POSIX :: strftime'によって処理されます - - どこでも私はそれを試しました。だから、私は保証について知りません。 – Axeman

関連する問題