2014-09-23 102 views
1

我想顯示使用Time::Piece昨天’的日期和超載字串和算術運算象下面這樣:時間::片顯示昨天的日期

use strict; 
use warnings; 
use feature qw(say); 

use Time::Piece; 
use Time::Seconds; 

say " Today is " . localtime; 
say "Yesterday is " . localtime - ONE_DAY; 

Outputs

Today is Mon Sep 22 15:09:00 2014 
Yesterday is Tue Dec 30 16:00:00 1969 

然而,隨着可以觀察,今日’的日期有效,但昨天’ s是在時代周圍。

一種解決方案是通過在做數學之前創建一個變量$today - ONE_DAY。如所期望

Yesterday is 1969-12-30 
Yesterday is 1969-12-30 
Yesterday is 2014-09-21 
Yesterday is 2014-09-21 

的第三和上述工作第四方法:此外,以下其他格式揭示的更多信息:

my $fmt = '%Y-%m-%d'; 

say "Yesterday is ", (localtime - ONE_DAY  )->strftime($fmt); 
say "Yesterday is ", (+localtime - ONE_DAY  )->strftime($fmt); 
say "Yesterday is ", (scalar(localtime) - ONE_DAY)->strftime($fmt); 
say "Yesterday is ", (- ONE_DAY + localtime  )->strftime($fmt); 

Outputs

那麼’的交易?

回答

6

這可以使用B::Deparse查看的perl如何解釋代碼被診斷:

$ perl -MTime::Piece -MTime::Seconds -MO=Deparse -e ' 
      print "Yest is " . localtime - ONE_DAY 
      ' 
print 'Yest is ' . localtime(-86400); 
-e syntax OK 

所以問題是,localtime是治療- ONE_DAY作爲其可選參數和Minus operator -被切換到它的一元上下文。

此固定簡單地使用額外的括號:

use strict; 
use warnings; 
use feature qw(say); 

use Time::Piece; 
use Time::Seconds; 

say "Today is " . localtime; 
say " Yest is " . (localtime() - ONE_DAY); 

Outputs

Today is Mon Sep 22 16:25:45 2014 
Yest is Sun Sep 21 16:25:45 2014 
相關問題