2011-08-12 11 views
5

私がここでやろうとしているのは、その日の前に にゼロを追加するための日または月が1桁の場合です。今のところは201188として、日付を出力し、($月< 10)
{
          $月= "0 $の月" 場合、私は 20110808.Date :: Calc - 日と月をフォーマットする

#!/usr/bin/perl 
use Date::Calc qw(Add_Delta_Days); 
my (undef, undef, undef, $day, $month, $year) = localtime(); 
$year +=1900; 
$month +=1; 
($year, $month, $day) = Add_Delta_Days($year, $month, $day, -3) 
if ($month =~ /\d{1}/){ 
    s/$month/0$month/ 
} 
if ($day =~/\d{1}/){ 
    s/$day/0$day/ 
} 
print $year,$month,$day; 
+0

あなたのif文は意味がありません。

use DateTime; my $date = DateTime->now; $date->subtract(days => 3); print $date->ymd; 

実際には、あなたがすること減らすことができます。最初に、それらは常に1桁(1または2)を含むので、if文は常に真です。次に、 '$ _'と' $ day'ではなく '$ _'変数に代入を行います。 – TLP

+0

@TLP、彼は彼が現在持っているコードを掲載しましたが、これはうまくいきません。それが彼の質問です。あなたのコメントは代わりに答えになるはずです。 – cjm

+0

実際に私は@TLPが私が理解する必要があった何かを指摘したと思う。 if文と$ _デフォルト変数についてです。 – capser

答えて

2

を探しています;
}

場合($日< 10)
{
          $日= "0 $日"。
代わり }

+0

ええ、これはとても簡単で簡潔な方法だと思います。ありがとうございます。 – capser

+2

しないでください。これを他の場所に渡すと、文字列を数値として扱うため、Perlは先頭のゼロをスキップします。書式付き印刷にはprintfを使用します。 – Olfan

4

使用printf:あなたはDateTimeを使用しない理由は、Date::Calcを使用して満足している場合は

C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,5,4" 
2011-05-04 
C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,5,12" 
2011-05-12 
C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,22,12" 
2011-22-12 
+1

私は '%02d'は'%.2d'より慣れていると言いたいと思います。 –

+0

@Keithありがとうございました。 – TLP

+0

対称性のために、私は一般的に ''%04d-%02d-%02d "'と書いています。 (副次的な点と、何年もの間に> 1000の間で本当の違いを生じさせないもの) –

5

printf "%d-%02d-%02d", $year, $month, $day; 

は、次のような出力を提供しますか?

print DateTime->now->subtract(days => 3)->ymd 
+0

+1いいです、私はこれを考えていたはずです。 ;) – TLP

関連する問題