Perl 處理時間的小技巧 strftime

2021-06-11 06:50:23 字數 2687 閱讀 6519

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

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

使用方法:

01

02

03

04

05

06

07

08

09

10

($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 也是支援的

使用起來很容易,如下:

1

2

3

4

5

#!/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 時間域這個和 date 的命令的字元格式是一樣的)

% 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);'

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

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

perl 時間處理

usr bin perl use posix qw strftime my day ymd strftime y m d localtime time 86400 days my day ymd strftime y m d localtime time 86400 days print day y...

perl時間處理

1 格式化輸出當前時間 perl e use strict use posix qw strftime print strftime y m d h m s n localtime time 2 時間格式轉換 perl e use time local use time piece s 2011 0...