2016-04-27 15 views
-3

localtime関数は1900年からの年を返しますと言っています。しかし、私は現在の日付に180日を追加してlocaltimeとして印刷します。 2016代わりに116perlの現地時間から得た

例の:

$today_date=timelocal(0,0,0,27,03,2016); 
$seconds=180*60*24*60; 
$date=today_date+seconds; 
$new_date=localtime(date); 
print strftime("%d-%m-%Y",$new_date); 

Output: 
24-10-2016 

、私はそれはまだ2016.Howはこの可能であるとして出力を与えるtimelocalする年として、116の代わりに、2016のような入力を与えますか?

+0

これは正しいです。私は 'strf'関数が何であるかはわかりませんが、それは年が2016年に変換される場所を探しているかどうかを調べる場所です。 – mob

+0

こんにちは、関数はstrftimeです。しかし、この関数を使用しないと、116年として表示されるはずですか?しかし、それは2016だけを表示していました。 – ball123

+4

あなたが示した内容は、有効なPerlコードではありません。使用している実際のコードを表示してください。また、 'seconds = 180 +(60 * 24 * 60);は180日ではなく1日180秒です。 – ThisSuitIsBlackNot

答えて

-2

あなたのソースコードが間違っています。$記号が変数名の前に欠けています。

モジュールTime::Localからの呼び出しは、1900年から1900年までの入力を入力として受け取り、2016年を渡します。最後に、この日付をlocaltimeに戻します。これはまったく逆の機能です。

この試してみてください:あなたが得る

print time; 
print join(" ",localtime(time)); 

1461783061 
1 51 20 27 3 116 3 117 1 

を:

  • 2分目51
  • 時間20
  • の日である27
  • ゼロベースヶ月3をApril
  • ある
  • 1900ベースの年間116 2016

localtimeの私のデフォルトの使用量は次のとおりです。

my @now = localtime(time); 
# Convert zero-based-month to calendar month 
++$now[4]; 
# Convert 1900-based-year to calendar year 
$now[5] += 1900; 

あなたが必要とするすべての日付の計算がある場合は、Date::Calc

use Date::Calc qw(Today Add_Delta_Days); 

print join '-', Today(); 
print join '-', Add_Delta_Days(Today(),1); 

2016-4-27 
2016-4-28 

またはDateTimeを試してください。

use DateTime; 

print DateTime->now->add(days => 1, seconds => 180); 

2016-04-28T19:00:12 

DateTimestrftimeメソッドまたはformatterオプションを使用すると、任意の出力が得られます。

+0

あなたは説明することができますか?1900年から1900年までを入力とし、2016年を年とするモジュールTime :: Localからtimelocalを呼び出すことから始めます。最後に、この日付をlocaltimeに戻します。これはまさに逆の関数です。 "なぜそれが印刷されていないのですか?1616の代わりに116が表示されます。これは疑問です – ball123

+2

['timelocal'の年入力はDWIMです。](https:// metacpan。org/pod/Time :: Local#Year-Value-Interpretation)ので、年の引数を1900年以降の年として扱っているとは限りません。 – mob

+2

@Sebastian ['timelocal'は年の値を999年を" 1900年からのオフセット]](https://metacpan.org/pod/Time::Local#Year-Value-Interpretation) – ThisSuitIsBlackNot

関連する問題