我找一個不那麼長的路,以產生在Perl如下:時間在Perl以下格式:20130527
獲取當前時間(月,日和年的代碼的一部分)。例如,如果我們在2013年,5月27日,輸出應爲20130527
我現在,如果我們使用「本地時間」,像
$date_str = localtime;
的輸出格式爲:星期三七月18 07:24:05 2001 是否還有其他特殊變量可用?
我找一個不那麼長的路,以產生在Perl如下:時間在Perl以下格式:20130527
獲取當前時間(月,日和年的代碼的一部分)。例如,如果我們在2013年,5月27日,輸出應爲20130527
我現在,如果我們使用「本地時間」,像
$date_str = localtime;
的輸出格式爲:星期三七月18 07:24:05 2001 是否還有其他特殊變量可用?
在Perl中,時間是存儲的時間爲自以來的秒數。 時代通常是1970年1月1日。
這使得排序和計算未來日子的時間變得很好。如果您需要知道今天30天后的情況,您可以添加2592,000(30天內的秒數)。
Perl有一個稱爲time
的標準函數,它返回從The Epoch開始的秒數。然後,您可以使用localtime
或gmtime
將其轉換爲時間元素數組(日,年,小時等)。
Perl,由於某種奇怪的原因,從來沒有一個內部函數需要一個時間元素數組並將其轉換回自Epoch以來的秒數。但是,Perl總是有一個標準模塊,它的功能timelocal
和timegm
。在Perl 5.0之前的日子裏,你會得到require "timelocal.pl";
。在Perl 5.0中,你現在是use Time::Local;
。
的轉換時間來回時間元件的陣列,並且自大紀元秒之間可以是一個有點痛與localtime
,gmtime
,timelocal
,和timegm
功能,並且在Perl 5.10,兩個新的模塊增加了Time::Piece
和Time::Seconds
。這兩個模塊允許您使用內置於Time::Piece
中的strptime
和strftime
函數來格式化時間。
如果你有Perl 5.10.0或更高,您有它容易:
use Time::Piece;
my $time = localtime; #$time is a Time::Piece object
# $time_string is in YYYYMMDD format
my $time_string = sprintf "%04d%02d%02d%", $time->year, $time->month, $time->day;
# Another way to do the above using the strftime function:
my $time_string = $time->strftime("%Y%m%d");
但是你的程序應該使用的秒數,因爲大紀元爲你的程序裏面的內部時間。您應該以這種格式存儲時間。你應該以這種格式計算時間,並且你應該以這種格式傳遞所有函數的時間。
這是因爲其他Perl模塊期望這種格式的時間,更重要的是,其他Perl開發人員會以這種格式預計和維護您的代碼。
#Converting the time from YYYYMMDD to seconds since the epoch
my $time = Time::Piece->strptime($YYYYDDMM_time, '%Y%m%d');
my $time_since_epoch = $time->epoch;
#Converting time since the epoch to YYYYMMDD
my $time = localtime($time_since_epoch);
my $YYYYMMDD_time = $time->strftime('%Y%m%d');
或者使用本地時間在列表上下文:
($d,$m,$y) = (localtime)[3,4,5];
say sprintf("%4d%02d%02d", $y+1900, $m+1, $d);
你可以像下面..
use POSIX;
my $today = POSIX::strftime('%Y%m%d', localtime);
print "$today\n";
Output: 20130527