2010-10-06 111 views

回答

29

最有效的,你還是電腦?

對於你:

use POSIX qw/strftime/; 

print strftime("%Y-%m-%d", localtime), "\n"; 

對於計算機:

my @t = localtime; 
$t[5] += 1900; 
$t[4]++; 

printf "%04d-%02d-%02d", @t[5,4,3]; 
10

命名空間Date::中有很多模塊,其中很多模塊可以幫助您執行所需的任務。或者,你可以滾你自己:

my ($day, $mon, $year) = (localtime)[3..5]; 
printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day; 

資源

+0

別忘了'DateTime'! – CanSpice 2010-10-06 18:06:39

6

可以使用Time::Piece模塊(捆綁使用Perl 5.10及以上,或者您也可以從CPAN下載),具體如下:

use strict; 
use warnings; 
use Time::Piece; 

my $today = localtime->ymd();  # Local time zone 
my $todayUtc = gmtime->ymd();  # UTC 
14

或者你可以使用DateTime模塊,它似乎是事實上的標準日期處理模塊e天。需要從CPAN安裝它。

use DateTime; 
my $now = DateTime->now->ymd; 
+0

在DateTime上進行標準化對於這個程序員來說當然會讓事情變得更簡單,並且對於所有事物一直使用一個相當全面的模塊似乎是一個不錯的主意,它有很多細節和不一致之處,如日期和時間計算 – plusplus 2010-10-07 09:04:31

+4

使用'DateTime-> now-> iso8601'如果你想要包括的時間。 – Flimm 2013-08-01 15:32:59

5

這不會創建任何臨時變量:

printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime]; 
+1

呵呵,我以前從來沒有考慮過使用地圖。我不知道我是否喜歡它,但它確實很聰明。 – 2014-03-28 09:08:53

+2

這種代碼就是爲什麼我同時愛和恨Perl – 2017-05-20 21:31:37