在 Perl 下處理時間的小技巧 strftime

2021-07-08 14:48:31 字數 3015 閱讀 5995

在 perl 中處理時間,很多模組,很方便,但是剛開始玩的人,可能沒有發現合適的模組,所以使用起來感覺很麻煩。通常大家都 localtime 搞得大家都很火大。我有幸和大師學習了一下,給大家推薦一下乙個模組 strftime。

我們在推薦前,介紹一下 perl 下取時間的今生前世吧。以前我想大家都是使用的 localtime 來取得當地日期時間和日期。這個函式如果在標量環境時,會以字串的形式來傳回目前的時間和日期 。預設的 localtime 的函式是以 1970 到今天的秒來做整數計算的。預設這個程式會呼叫 time 的函式來給它提供乙個值。

使用方法:

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)=localtime;

$sec:秒

$min:分

$hour:小時

$mday:日

$mon:月

$year:目前的年減去1990,不是僅將19xx年的19去掉,因此不會有y2k的困擾。

$wday:每週的日期(如sunday是0)

$yday:每年的日期(如jan 1是0)

$isdst:如果日光節約時間使用則是正值,其它為0。

上面這個函式常用,但是返回值非常亂,可讀性非常不好,讓我們很容易出錯,所以我推薦 strftime 這個時間函式。當然,還有另乙個模組 datatime 也相當不錯。不過 strftime 非常象 linux 常用的 date 的命令。strftime 是 c 中 posix 的乙個功能函式。被包含進了 perl 中。好象 php 也是支援的

使用起來很容易,如下:

#!/usr/bin/perl

use strict;

use warnings;

use posix qw

(strftime)

;print strftime(

"%y-%m-%d %h:%m:%s\n"

,localtime

(time))

;

會輸出

2010-08-21 07:44:24

strftime 時間域

% h 小時(00..23)

% i 小時(01..12)

% k 小時(0..23)

% l 小時(1..12)

% m 分(00..59)

% p 顯示出am或pm

% r 時間(hh:mm:ss am或pm),12小時

% s 從2023年1月1日00:00:00到目前經歷的秒數

% s 秒(00..59)

% t 時間(24小時制)(hh:mm:ss)

% x 顯示時間的格式(%h:%m:%s)

% z 時區 日期域

% a 星期幾的簡稱( sun..sat)

% a 星期幾的全稱( sunday..saturday)

% b 月的簡稱(jan..dec)

% b 月的全稱(january..december)

% c 日期和時間( mon nov 8 14:12:46 cst 1999)

% d 乙個月的第幾天(01..31)

% d 日期(mm/dd/yy)

% h 和%b選項相同

% j 一年的第幾天(001..366)

% m 月(01..12)

% w 乙個星期的第幾天(0代表星期天)

% w 一年的第幾個星期(00..53,星期一為第一天)

% x 顯示日期的格式(mm/dd/yy)

% y 年的最後兩個數字( 1999則是99)

% y 年(例如:1970,1996等)

常用的例項

得到日期的全部

perl -mposix -le 'print strftime "%c", localtime();'
sat 21 aug 2010 07:54:34 am cst

得到普通的指定的日期

perl -mposix -

le'print strftime "%a %d %b %y %h:%m:%s %z", localtime();'

sat 21 aug 2010 07:54:11 cst

得到乙個小時以前的時間

perl -mposix -

le'print strftime "%c", localtime(time()-3600);'

sat 21 aug 2010 06:55:54 am cst

得到一天前的時間

perl -mposix -

le'print strftime "%c", localtime(time()-86400);'

fri 20 aug 2010 07:56:36 am cst

use strict;

use posix;

use warnings;

use date::tie;

my $curr_date = new date::tie ->new(

year=>strftime("%y",localtime($arr[9])),

month=>strftime("%m",localtime($arr[9])),

day=>strftime("%d",localtime($arr[9])),

hour=>strftime("%h",localtime($arr[9])),

minute=>strftime("%m",localtime($arr[9])),

second=>strftime("%s",localtime($arr[9])),

);$curr_date-> --;

my $last_date = $curr_date->.$curr_date->.$curr_date->."_".$curr_date->.$curr_date->.$curr_date->;

Perl 處理時間的小技巧 strftime

在 perl 中處理時間,很多模組,很方便,但是剛開始玩的人,可能沒有發現合適的模組,所以使用起來感覺很麻煩.通常大家都 localtime 搞得大家都很火大.我有幸和大師學習了一下,給大家推薦一下乙個模組 strftime.我們在推薦前,介紹一下 perl 下取時間的今生前世吧.以前我想大家都是使...

時間管理的小技巧

這裡分享一下我現在用的時間管理小技巧。看過一些書,覺得很多都是講理論性的東西,感覺說的都是因為我生也有涯,事情無限多,所以要將有限的生命集中在對自己最重要的事情上,隨之而來的就是 1 先做重要且緊急的 2 再做重要不緊急的 3 再做緊急不重要的 4 最後再做不緊急也不重要的。那麼現在問題來了,什麼事...

時間管理的小技巧(續)

接著前面時間管理小技巧裡的討論,說說拖沓的問題,就我個人來說,拖沓主要由兩個原因組成 1.這個事情實在是不情願做,比如跟客戶吵架 2.今天很累,沒心思幹活 對於第一點,最好就是授權出去,讓別人做,例如推給老闆,例如指派下屬解決。如果實在是逃不掉,就盡早做,所謂早死早超生。對於第二點,如果這個事情處理...